diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-07 01:35:50 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-07 01:35:50 +0200 |
commit | 272d3ddb76e8f017a8a2fe0899e58e0dff840c9f (patch) | |
tree | 789c9fbaf4f5cb9d5c55f5beb7295322a8a4498e /src/encoding/headers.rs | |
parent | 9ea6c416e5621bfb69733e0d24370252e6893ace (diff) | |
download | sip-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.rs | 14 |
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)?, + }) } } |