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