1#[derive(serde::Serialize, Debug, Eq, PartialEq)]
2#[repr(u8)]
3pub enum Priority {
4 EMERG = 0,
6
7 ALERT = 1,
9
10 CRIT = 2,
12
13 ERR = 3,
15
16 WARNING = 4,
18
19 NOTICE = 5,
21
22 INFO = 6,
24
25 DEBUG = 7,
27
28 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}