rtsp_types/headers/
cseq.rs1use super::*;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct CSeq(u32);
11
12impl std::ops::Deref for CSeq {
13 type Target = u32;
14
15 fn deref(&self) -> &Self::Target {
16 &self.0
17 }
18}
19
20impl std::ops::DerefMut for CSeq {
21 fn deref_mut(&mut self) -> &mut Self::Target {
22 &mut self.0
23 }
24}
25
26impl AsRef<u32> for CSeq {
27 fn as_ref(&self) -> &u32 {
28 &self.0
29 }
30}
31
32impl AsMut<u32> for CSeq {
33 fn as_mut(&mut self) -> &mut u32 {
34 &mut self.0
35 }
36}
37
38impl From<u32> for CSeq {
39 fn from(v: u32) -> CSeq {
40 CSeq(v)
41 }
42}
43
44impl From<CSeq> for u32 {
45 fn from(v: CSeq) -> u32 {
46 v.0
47 }
48}
49
50impl super::TypedHeader for CSeq {
51 fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>, HeaderParseError> {
52 let headers = headers.as_ref();
53
54 let header = match headers.get(&CSEQ) {
55 None => return Ok(None),
56 Some(header) => header,
57 };
58
59 let cseq = header
60 .as_str()
61 .parse::<u32>()
62 .map(CSeq)
63 .map_err(|_| HeaderParseError)?;
64
65 Ok(Some(cseq))
66 }
67
68 fn insert_into(&self, mut headers: impl AsMut<Headers>) {
69 let headers = headers.as_mut();
70
71 headers.insert(CSEQ, self.0.to_string());
72 }
73}