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, } 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) -> Response { Response{ header: header, data: data, } } pub fn new_empty(header: Header) -> Response { Response{ header: header, data: Vec::new(), } } pub fn format(&self) -> Vec { let mut resp: Vec = 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" ), ) }