#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct HeaderMap {
entries: Vec<(String, String)>,
}
impl HeaderMap {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, name: impl Into<String>, value: impl Into<String>) {
let name = name.into();
let value = value.into();
if let Some((_, existing)) = self
.entries
.iter_mut()
.find(|(existing_name, _)| existing_name.eq_ignore_ascii_case(&name))
{
*existing = value;
return;
}
self.entries.push((name, value));
}
pub fn get(&self, name: &str) -> Option<&str> {
self.entries
.iter()
.find(|(existing_name, _)| existing_name.eq_ignore_ascii_case(name))
.map(|(_, value)| value.as_str())
}
pub fn iter(&self) -> impl Iterator<Item = (&str, &str)> {
self.entries
.iter()
.map(|(name, value)| (name.as_str(), value.as_str()))
}
}