1use crate::Error;
4use std::convert::TryFrom;
5
6pub use crate::tokenizers::value::Tokenizer;
9
10#[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}