use std::{collections::HashMap, ops::Deref};
#[derive(Clone, Default, Debug)]
pub struct HeaderMap(HashMap<String, Vec<String>>);
impl HeaderMap {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, name: &str, value: &str) {
match self.0.get_mut(name) {
Some(values) => values.push(value.to_string()),
None => {
self.0.insert(name.to_lowercase(), vec![value.to_string()]);
}
}
}
pub fn get(&self, name: &str) -> Option<String> {
self.0.get(&name.to_lowercase())?.first().cloned()
}
pub fn get_all(&self, name: &str) -> Option<Vec<String>> {
self.0.get(&name.to_lowercase()).cloned()
}
}
impl From<(&str, &str)> for HeaderMap {
fn from(val: (&str, &str)) -> Self {
let mut map = HeaderMap::new();
map.insert(&val.0.to_lowercase(), val.1);
map
}
}
impl Deref for HeaderMap {
type Target = HashMap<String, Vec<String>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}