openrtb_native1/
version.rs

1/// 4.1 Native Markup Request Object#Version
2/// 5.1 Native Markup Response Object#Version
3///
4/// Version of the Native Markup version in use.
5#[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq, Eq, Clone, Copy)]
6pub enum Version {
7    #[serde(rename = "1.0")]
8    V1_0,
9    #[serde(rename = "1.1")]
10    V1_1,
11    #[serde(rename = "1.2")]
12    V1_2,
13}
14
15impl Default for Version {
16    fn default() -> Self {
17        Self::V1_2
18    }
19}
20
21impl std::str::FromStr for Version {
22    type Err = serde_json::Error;
23
24    fn from_str(s: &str) -> Result<Self, Self::Err> {
25        serde_json::from_str(s)
26    }
27}
28
29#[cfg(test)]
30mod test {
31    use super::*;
32
33    #[test]
34    fn json() -> serde_json::Result<()> {
35        assert!(serde_json::from_str::<Version>("0.9").is_err());
36
37        let json = r#"["1.0","1.1","1.2"]"#;
38        let e1: Vec<Version> = serde_json::from_str(json)?;
39        assert_eq!(e1, vec![Version::V1_0, Version::V1_1, Version::V1_2]);
40        assert_eq!(serde_json::to_string(&e1)?, json);
41
42        Ok(())
43    }
44}