aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/headers.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-04 17:15:25 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-04 17:15:25 +0200
commit3f80205783bcf6a2ed682f6f21e5b1877d597328 (patch)
tree6039d0b040dd697389b5b0a35a78bb258d446bff /src/encoding/headers.rs
parent2c1977bbf97653bc3faae9d4cebcfb61c6cd347b (diff)
downloadsip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar
sip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar.bz2
sip-rs-3f80205783bcf6a2ed682f6f21e5b1877d597328.tar.zst
rfiles
Diffstat (limited to 'src/encoding/headers.rs')
-rw-r--r--src/encoding/headers.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/encoding/headers.rs b/src/encoding/headers.rs
new file mode 100644
index 0000000..d837ee5
--- /dev/null
+++ b/src/encoding/headers.rs
@@ -0,0 +1,36 @@
+use std::{fmt::Display, str::FromStr};
+
+macro_rules! header {
+ ($hname:literal, struct $name:ident($type:ty)) => {
+ pub struct $name(pub $type);
+ impl Header for $name {
+ const NAME: &'static str = $hname;
+ }
+ impl Display for $name {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "{}", self.0)
+ }
+ }
+ impl FromStr for $name {
+ type Err = anyhow::Error;
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ Ok($name(<$type>::from_str(s)?))
+ }
+ }
+ };
+}
+
+pub trait Header: FromStr<Err = anyhow::Error> + Display {
+ const NAME: &'static str;
+}
+
+header!("Content-Length", struct ContentLength(usize));
+header!("Call-ID", struct CallID(String));
+header!("CSeq", struct CSeq(String));
+header!("Via", struct Via(String));
+header!("Contact", struct Contact(String));
+header!("Max-Forwards", struct MaxForwards(usize));
+header!("From", struct From(String));
+header!("To", struct To(String));
+header!("User-Agent", struct UserAgent(String));
+header!("Allow", struct Allow(String));