journal_json/
priority.rs

1#[derive(serde::Serialize, Debug, Eq, PartialEq)]
2#[repr(u8)]
3pub enum Priority {
4    // system is unusable
5    EMERG = 0,
6
7    // action must be taken immediately
8    ALERT = 1,
9
10    // critical conditions
11    CRIT = 2,
12
13    // error conditions
14    ERR = 3,
15
16    // warning conditions
17    WARNING = 4,
18
19    // normal, but significant, condition
20    NOTICE = 5,
21
22    // informational message
23    INFO = 6,
24
25    // debug-level message
26    DEBUG = 7,
27
28    // If deserializing to another variant failed
29    Unknown(String),
30}
31
32impl<'de> serde::Deserialize<'de> for Priority {
33    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34    where
35        D: serde::Deserializer<'de>,
36    {
37        let s = String::deserialize(deserializer)?;
38        Ok(match s.as_ref() {
39            "0" => Priority::EMERG,
40            "1" => Priority::ALERT,
41            "2" => Priority::CRIT,
42            "3" => Priority::ERR,
43            "4" => Priority::WARNING,
44            "5" => Priority::NOTICE,
45            "6" => Priority::INFO,
46            "7" => Priority::DEBUG,
47            _ => Priority::Unknown(s),
48        })
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::Priority;
55
56    #[derive(Debug, serde::Deserialize)]
57    struct Obj {
58        p: Priority,
59    }
60
61    #[test]
62    fn test_deser_emerg() {
63        let s = r#"{"p":"0"}"#;
64        let o: Obj = serde_json::from_str(s).unwrap();
65        assert_eq!(o.p, Priority::EMERG);
66    }
67
68    #[test]
69    fn test_deser_alert() {
70        let s = r#"{"p":"1"}"#;
71        let o: Obj = serde_json::from_str(s).unwrap();
72        assert_eq!(o.p, Priority::ALERT);
73    }
74
75    #[test]
76    fn test_deser_crit() {
77        let s = r#"{"p":"2"}"#;
78        let o: Obj = serde_json::from_str(s).unwrap();
79        assert_eq!(o.p, Priority::CRIT);
80    }
81
82    #[test]
83    fn test_deser_err() {
84        let s = r#"{"p":"3"}"#;
85        let o: Obj = serde_json::from_str(s).unwrap();
86        assert_eq!(o.p, Priority::ERR);
87    }
88
89    #[test]
90    fn test_deser_warning() {
91        let s = r#"{"p":"4"}"#;
92        let o: Obj = serde_json::from_str(s).unwrap();
93        assert_eq!(o.p, Priority::WARNING);
94    }
95
96    #[test]
97    fn test_deser_notice() {
98        let s = r#"{"p":"5"}"#;
99        let o: Obj = serde_json::from_str(s).unwrap();
100        assert_eq!(o.p, Priority::NOTICE);
101    }
102
103    #[test]
104    fn test_deser_info() {
105        let s = r#"{"p":"6"}"#;
106        let o: Obj = serde_json::from_str(s).unwrap();
107        assert_eq!(o.p, Priority::INFO);
108    }
109
110    #[test]
111    fn test_deser_debug() {
112        let s = r#"{"p":"7"}"#;
113        let o: Obj = serde_json::from_str(s).unwrap();
114        assert_eq!(o.p, Priority::DEBUG);
115    }
116}