diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-04 17:15:25 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-04 17:15:25 +0200 |
commit | 3f80205783bcf6a2ed682f6f21e5b1877d597328 (patch) | |
tree | 6039d0b040dd697389b5b0a35a78bb258d446bff /src/encoding/headermap.rs | |
parent | 2c1977bbf97653bc3faae9d4cebcfb61c6cd347b (diff) | |
download | sip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar sip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar.bz2 sip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar.zst |
rfiles
Diffstat (limited to 'src/encoding/headermap.rs')
-rw-r--r-- | src/encoding/headermap.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/encoding/headermap.rs b/src/encoding/headermap.rs new file mode 100644 index 0000000..313d8b5 --- /dev/null +++ b/src/encoding/headermap.rs @@ -0,0 +1,34 @@ +use super::headers::Header; +use anyhow::Result; +use std::fmt::Display; + +#[derive(Debug)] +pub struct HeaderMap(pub Vec<(String, String)>); + +impl HeaderMap { + pub fn new() -> Self { + Self(vec![]) + } + pub fn add<H: Header>(mut self, h: H) -> Self { + self.0.push((H::NAME.to_string(), format!("{h}"))); + self + } + pub fn get<H: Header>(&self) -> Option<Result<H>> { + self.0 + .iter() + .find(|(k, _)| k == H::NAME) + .map(|(_, v)| H::from_str(v)) + } + pub fn insert_raw(&mut self, key: String, value: String) { + self.0.push((key, value)) + } +} + +impl Display for HeaderMap { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for (k, v) in &self.0 { + write!(f, "{k}: {v}\r\n")?; + } + Ok(()) + } +} |