diff options
Diffstat (limited to 'src/server/response.rs')
| -rw-r--r-- | src/server/response.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/server/response.rs b/src/server/response.rs new file mode 100644 index 0000000..f2df722 --- /dev/null +++ b/src/server/response.rs @@ -0,0 +1,66 @@ +use std::vec::Vec; + +#[derive(Copy, Clone)] +pub enum Status { + Input = 1, + Success = 2, + Redirect = 3, + TemporaryFailure = 4, + PermanentFailure = 5, + ClientCertificateRequired = 6, +} + +pub struct Header { + status: Status, + meta: String, +} + +pub struct Response { + header: Header, + data: Vec<u8>, +} + +impl Header { + pub fn new(status: Status, meta: &str) -> Header { + Header{ + status: status, + meta: meta.to_string(), + } + } + + pub fn format(&self) -> String { + let status: u8 = self.status as u8; + return format!("{} {}\r\n", status * 10, self.meta) + } +} + +impl Response { + pub fn new(header: Header, data: Vec<u8>) -> Response { + Response{ + header: header, + data: data, + } + } + + pub fn new_empty(header: Header) -> Response { + Response{ + header: header, + data: Vec::new(), + } + } + + pub fn format(&self) -> Vec<u8> { + let mut resp: Vec<u8> = self.header.format().as_bytes().to_vec(); + resp.extend(&self.data); + return resp; + } +} + +pub fn invalid_protocol () -> Response { + Response::new_empty( + Header::new( + Status::PermanentFailure, + "this protocol is not supported" + ), + ) +} |
