ftth_rsip/headers/typed/
cseq.rs

1#[doc(hidden)]
2pub use super::tokenizers::CseqTokenizer as Tokenizer;
3
4use crate::common::Method;
5use rsip_derives::TypedHeader;
6use std::convert::TryFrom;
7
8/// The `CSeq` header in its [typed](super) form.
9#[derive(TypedHeader, Eq, PartialEq, Clone, Debug)]
10pub struct CSeq {
11    pub seq: u32,
12    pub method: Method,
13}
14
15impl From<(u32, Method)> for CSeq {
16    fn from(tuple: (u32, Method)) -> Self {
17        Self {
18            seq: tuple.0,
19            method: tuple.1,
20        }
21    }
22}
23
24impl<'a> TryFrom<Tokenizer<'a>> for CSeq {
25    type Error = crate::Error;
26
27    fn try_from(tokenizer: Tokenizer) -> Result<Self, Self::Error> {
28        Ok(CSeq {
29            seq: tokenizer.seq.parse::<u32>()?,
30            method: tokenizer.method.parse::<Method>()?,
31        })
32    }
33}
34
35impl std::fmt::Display for CSeq {
36    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37        write!(f, "{} {}", self.seq, self.method)
38    }
39}