aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/headers.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-07 01:35:50 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-07 01:35:50 +0200
commit272d3ddb76e8f017a8a2fe0899e58e0dff840c9f (patch)
tree789c9fbaf4f5cb9d5c55f5beb7295322a8a4498e /src/encoding/headers.rs
parent9ea6c416e5621bfb69733e0d24370252e6893ace (diff)
downloadsip-rs-272d3ddb76e8f017a8a2fe0899e58e0dff840c9f.tar
sip-rs-272d3ddb76e8f017a8a2fe0899e58e0dff840c9f.tar.bz2
sip-rs-272d3ddb76e8f017a8a2fe0899e58e0dff840c9f.tar.zst
eyeballed uri parser
Diffstat (limited to 'src/encoding/headers.rs')
-rw-r--r--src/encoding/headers.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/encoding/headers.rs b/src/encoding/headers.rs
index afcfef1..e880739 100644
--- a/src/encoding/headers.rs
+++ b/src/encoding/headers.rs
@@ -166,7 +166,17 @@ impl Display for Contact {
}
impl FromStr for Contact {
type Err = anyhow::Error;
- fn from_str(_s: &str) -> Result<Self, Self::Err> {
- todo!()
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let (display_name, rest) = s.split_once("<").ok_or(anyhow!("malformed contact"))?;
+ let (uri, params) = rest.split_once(">;").ok_or(anyhow!("malformed contact"))?;
+ Ok(Self {
+ display_name: if display_name.is_empty() {
+ None
+ } else {
+ Some(display_name.to_string())
+ },
+ params: params.to_string(),
+ uri: Uri::from_str(uri)?,
+ })
}
}