aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/headermap.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-11-19 02:08:52 +0100
committermetamuffin <metamuffin@disroot.org>2024-11-19 02:08:52 +0100
commitcbc111f90b5facc1f2a9dd79ced216279d6260af (patch)
treefa5a1d2d67874413d8e66673825c6789e8cc0945 /src/encoding/headermap.rs
parent2d9a31244eab6d3a9871369d3148de253e902d36 (diff)
downloadsip-rs-cbc111f90b5facc1f2a9dd79ced216279d6260af.tar
sip-rs-cbc111f90b5facc1f2a9dd79ced216279d6260af.tar.bz2
sip-rs-cbc111f90b5facc1f2a9dd79ced216279d6260af.tar.zst
move files + rtp parser
Diffstat (limited to 'src/encoding/headermap.rs')
-rw-r--r--src/encoding/headermap.rs60
1 files changed, 0 insertions, 60 deletions
diff --git a/src/encoding/headermap.rs b/src/encoding/headermap.rs
deleted file mode 100644
index 01e1962..0000000
--- a/src/encoding/headermap.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-use super::headers::Header;
-use anyhow::{anyhow, Result};
-use std::fmt::Display;
-
-#[derive(Debug, Clone)]
-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 insert<H: Header>(&mut self, h: H) {
- self.0.push((H::NAME.to_string(), format!("{h}")));
- }
- pub fn get_raw(&self, name: &str) -> Option<&str> {
- self.0
- .iter()
- .find(|(k, _)| k.eq_ignore_ascii_case(name))
- .map(|(_, v)| v.as_str())
- }
- pub fn get<H: Header>(&self) -> Option<Result<H>> {
- self.get_raw(H::NAME).map(H::from_str)
- }
- pub fn get_res<H: Header>(&self) -> Result<H> {
- self.get().ok_or(anyhow!("{} header missing", H::NAME))?
- }
- 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(())
- }
-}
-impl HeaderMap {
- pub fn parse<'a>(lines: &mut impl Iterator<Item = &'a str>) -> Result<Self> {
- let mut headers = HeaderMap::new();
- for line in lines {
- // TODO multiline values
- let (key, value) = line.split_once(":").ok_or(anyhow!("header malformed"))?;
- headers.insert_raw(key.trim().to_string(), value.trim().to_string())
- }
- Ok(headers)
- }
-}
-
-impl FromIterator<(String, String)> for HeaderMap {
- fn from_iter<T: IntoIterator<Item = (String, String)>>(iter: T) -> Self {
- Self(Vec::from_iter(iter))
- }
-}