1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
18#[serde(rename_all = "lowercase")]
19pub enum TrustLevel {
20 Anonymous = 0,
21 Known = 1,
22 Partner = 2,
23 Internal = 3,
24}
25
26impl fmt::Display for TrustLevel {
27 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
28 match self {
29 TrustLevel::Anonymous => write!(f, "anonymous"),
30 TrustLevel::Known => write!(f, "known"),
31 TrustLevel::Partner => write!(f, "partner"),
32 TrustLevel::Internal => write!(f, "internal"),
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_ordering() {
43 assert!(TrustLevel::Anonymous < TrustLevel::Known);
44 assert!(TrustLevel::Known < TrustLevel::Partner);
45 assert!(TrustLevel::Partner < TrustLevel::Internal);
46 }
47
48 #[test]
49 fn test_display_anonymous() {
50 assert_eq!(TrustLevel::Anonymous.to_string(), "anonymous");
51 }
52
53 #[test]
54 fn test_display_known() {
55 assert_eq!(TrustLevel::Known.to_string(), "known");
56 }
57
58 #[test]
59 fn test_display_partner() {
60 assert_eq!(TrustLevel::Partner.to_string(), "partner");
61 }
62
63 #[test]
64 fn test_display_internal() {
65 assert_eq!(TrustLevel::Internal.to_string(), "internal");
66 }
67
68 #[test]
69 fn test_serde_round_trip() {
70 for level in
71 [TrustLevel::Anonymous, TrustLevel::Known, TrustLevel::Partner, TrustLevel::Internal]
72 {
73 let json = serde_json::to_string(&level).unwrap();
74 let deserialized: TrustLevel = serde_json::from_str(&json).unwrap();
75 assert_eq!(level, deserialized);
76 }
77 }
78
79 #[test]
80 fn test_serde_lowercase() {
81 assert_eq!(serde_json::to_string(&TrustLevel::Anonymous).unwrap(), "\"anonymous\"");
82 assert_eq!(serde_json::to_string(&TrustLevel::Known).unwrap(), "\"known\"");
83 assert_eq!(serde_json::to_string(&TrustLevel::Partner).unwrap(), "\"partner\"");
84 assert_eq!(serde_json::to_string(&TrustLevel::Internal).unwrap(), "\"internal\"");
85 }
86}