1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
pub mod header { pub struct Header { key: &'static str, value: &'static str, } impl Header { pub fn to_string(&self) -> String { format!("{}: {}", &self.key, &self.value) } pub fn new(key: &'static str, value: &'static str) -> Header { Header { key: key.trim(), value: value.trim(), } } } pub struct Headers { headers: Vec<Header>, } impl Headers { pub fn new() -> Headers { Headers { headers: vec![] } } pub fn append(&mut self, header: Header) { self.headers.push(header); } pub fn has(&self, key: &'static str) -> bool { for header in &self.headers { if key.trim().to_lowercase().eq(&header.key.to_lowercase()) { return true; } } false } pub fn get(&self, key: &'static str) -> Option<&Header> { for header in &self.headers { if key.trim().to_lowercase().eq(&header.key.to_lowercase()) { return Some(header); } } None } pub fn finalize(&self) -> String { let mut final_string = String::new(); for header in &self.headers { final_string += &header.to_string(); final_string += "\r\n\r\n"; } final_string } } } #[cfg(test)] mod tests { #[test] fn to_string() { use super::header::Header; let header = Header::new("Content-Type", "application/json"); assert_eq!(header.to_string(), String::from("Content-Type: application/json")); } #[test] fn has() { use super::header::Header; use super::header::Headers; let mut headers = Headers::new(); headers.append(Header::new("Content-Type", "Application/Json")); headers.append(Header::new("Content-Type", "Application/Json")); assert_eq!(true, headers.has("content-type")); } }