rsip 0.4.0

SIP Rust library, parser & generator of SIP
Documentation
#[doc(hidden)]
pub use super::tokenizers::CseqTokenizer as Tokenizer;

use crate::common::Method;
use rsip_derives::TypedHeader;
use std::convert::TryFrom;

/// The `CSeq` header in its [typed](super) form.
#[derive(TypedHeader, Eq, PartialEq, Clone, Debug)]
pub struct CSeq {
    pub seq: u32,
    pub method: Method,
}

impl From<(u32, Method)> for CSeq {
    fn from(tuple: (u32, Method)) -> Self {
        Self {
            seq: tuple.0,
            method: tuple.1,
        }
    }
}

impl<'a> TryFrom<Tokenizer<'a>> for CSeq {
    type Error = crate::Error;

    fn try_from(tokenizer: Tokenizer) -> Result<Self, Self::Error> {
        Ok(CSeq {
            seq: tokenizer.seq.parse::<u32>()?,
            method: tokenizer.method.parse::<Method>()?,
        })
    }
}

impl std::fmt::Display for CSeq {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{} {}", self.seq, self.method)
    }
}