rocketmq_auth/authentication/enums/
user_status.rs1use serde::Deserialize;
16use serde::Deserializer;
17use serde::Serialize;
18use serde::Serializer;
19
20#[repr(u8)]
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
22pub enum UserStatus {
23 Enable = 1,
24 Disable = 2,
25}
26
27impl UserStatus {
28 #[inline]
29 pub fn get_by_name(name: &str) -> Option<Self> {
30 if name.eq_ignore_ascii_case("enable") {
31 Some(UserStatus::Enable)
32 } else if name.eq_ignore_ascii_case("disable") {
33 Some(UserStatus::Disable)
34 } else {
35 None
36 }
37 }
38
39 #[inline]
40 pub fn code(self) -> u8 {
41 self as u8
42 }
43
44 #[inline]
45 pub fn name(self) -> &'static str {
46 match self {
47 UserStatus::Enable => "enable",
48 UserStatus::Disable => "disable",
49 }
50 }
51}
52
53impl Serialize for UserStatus {
54 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
55 where
56 S: Serializer,
57 {
58 serializer.serialize_u8(*self as u8)
59 }
60}
61
62impl<'de> Deserialize<'de> for UserStatus {
63 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
64 where
65 D: Deserializer<'de>,
66 {
67 let v = u8::deserialize(deserializer)?;
68 match v {
69 1 => Ok(UserStatus::Enable),
70 2 => Ok(UserStatus::Disable),
71 _ => Err(serde::de::Error::custom("invalid UserStatus")),
72 }
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use serde_json;
79
80 use super::*;
81
82 #[test]
83 fn test_get_by_name() {
84 assert_eq!(UserStatus::get_by_name("enable"), Some(UserStatus::Enable));
85 assert_eq!(UserStatus::get_by_name("ENABLE"), Some(UserStatus::Enable));
86 assert_eq!(UserStatus::get_by_name("Enable"), Some(UserStatus::Enable));
87 assert_eq!(UserStatus::get_by_name("disable"), Some(UserStatus::Disable));
88 assert_eq!(UserStatus::get_by_name("DISABLE"), Some(UserStatus::Disable));
89 assert_eq!(UserStatus::get_by_name("Disable"), Some(UserStatus::Disable));
90 assert_eq!(UserStatus::get_by_name("invalid"), None);
91 assert_eq!(UserStatus::get_by_name(""), None);
92 }
93
94 #[test]
95 fn test_code() {
96 assert_eq!(UserStatus::Enable.code(), 1);
97 assert_eq!(UserStatus::Disable.code(), 2);
98 }
99
100 #[test]
101 fn test_name() {
102 assert_eq!(UserStatus::Enable.name(), "enable");
103 assert_eq!(UserStatus::Disable.name(), "disable");
104 }
105
106 #[test]
107 fn test_serialize() {
108 let enable_json = serde_json::to_string(&UserStatus::Enable).unwrap();
109 assert_eq!(enable_json, "1");
110
111 let disable_json = serde_json::to_string(&UserStatus::Disable).unwrap();
112 assert_eq!(disable_json, "2");
113 }
114
115 #[test]
116 fn test_deserialize() {
117 let enable: UserStatus = serde_json::from_str("1").unwrap();
118 assert_eq!(enable, UserStatus::Enable);
119
120 let disable: UserStatus = serde_json::from_str("2").unwrap();
121 assert_eq!(disable, UserStatus::Disable);
122 }
123
124 #[test]
125 fn test_deserialize_invalid() {
126 let result: Result<UserStatus, _> = serde_json::from_str("0");
127 assert!(result.is_err());
128
129 let result: Result<UserStatus, _> = serde_json::from_str("3");
130 assert!(result.is_err());
131
132 let result: Result<UserStatus, _> = serde_json::from_str("\"invalid\"");
133 assert!(result.is_err());
134 }
135
136 #[test]
137 fn test_round_trip_serialization() {
138 let original = UserStatus::Enable;
139 let serialized = serde_json::to_string(&original).unwrap();
140 let deserialized: UserStatus = serde_json::from_str(&serialized).unwrap();
141 assert_eq!(original, deserialized);
142
143 let original = UserStatus::Disable;
144 let serialized = serde_json::to_string(&original).unwrap();
145 let deserialized: UserStatus = serde_json::from_str(&serialized).unwrap();
146 assert_eq!(original, deserialized);
147 }
148}