sdp_rs/lines/
version.rs

1//! Types related to the version line (`v=`).
2
3use crate::Error;
4use std::convert::TryFrom;
5
6/// The version line (`v=`) tokenizer. This is low level stuff and you shouldn't interact directly
7/// with it, unless you know what you are doing.
8pub use crate::tokenizers::value::Tokenizer;
9
10/// The version line (`v=`) of SDP. It is expected to always be 0.
11#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Clone, Copy)]
12pub enum Version {
13    V0,
14}
15
16impl<'a> TryFrom<Tokenizer<'a, 'v'>> for Version {
17    type Error = Error;
18
19    fn try_from(tokenizer: Tokenizer<'a, 'v'>) -> Result<Self, Self::Error> {
20        if tokenizer.value.eq("0") {
21            Ok(Self::V0)
22        } else {
23            Err(Error::parser("version", tokenizer.value))
24        }
25    }
26}
27
28impl std::fmt::Display for Version {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        match self {
31            Self::V0 => write!(f, "v=0"),
32        }
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn from_tokenizer1() {
42        let tokenizer: Tokenizer<'v'> = "0".into();
43
44        assert_eq!(Version::try_from(tokenizer), Ok(Version::V0));
45    }
46
47    #[test]
48    fn from_tokenizer2() {
49        let tokenizer: Tokenizer<'v'> = "1".into();
50
51        assert!(Version::try_from(tokenizer).is_err());
52    }
53
54    #[test]
55    fn display1() {
56        let version = Version::V0;
57
58        assert_eq!(version.to_string(), "v=0");
59    }
60}