rocketmq_client_rust/base/
access_channel.rs1use serde::ser::SerializeStruct;
18use serde::Deserialize;
19use serde::Deserializer;
20use serde::Serialize;
21use serde::Serializer;
22
23#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)]
24pub enum AccessChannel {
25 #[default]
26 Local,
27 Cloud,
28}
29
30impl Serialize for AccessChannel {
31 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: Serializer,
34 {
35 let mut state = serializer.serialize_struct("AccessChannel", 1)?;
36 match *self {
37 AccessChannel::Local => state.serialize_field("AccessChannel", "LOCAL")?,
38 AccessChannel::Cloud => state.serialize_field("AccessChannel", "CLOUD")?,
39 }
40 state.end()
41 }
42}
43
44impl<'de> Deserialize<'de> for AccessChannel {
45 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
46 where
47 D: Deserializer<'de>,
48 {
49 let s: &str = Deserialize::deserialize(deserializer)?;
50 match s {
51 "LOCAL" => Ok(AccessChannel::Local),
52 "CLOUD" => Ok(AccessChannel::Cloud),
53 _ => Err(serde::de::Error::custom("unknown AccessChannel variant")),
54 }
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use serde_json;
61
62 use super::*;
63
64 #[test]
65 fn serialize_access_channel_local() {
66 let channel = AccessChannel::Local;
67 let serialized = serde_json::to_string(&channel).unwrap();
68 assert_eq!(serialized, r#"{"AccessChannel":"LOCAL"}"#);
69 }
70
71 #[test]
72 fn serialize_access_channel_cloud() {
73 let channel = AccessChannel::Cloud;
74 let serialized = serde_json::to_string(&channel).unwrap();
75 assert_eq!(serialized, r#"{"AccessChannel":"CLOUD"}"#);
76 }
77
78 #[test]
79 fn deserialize_access_channel_local() {
80 let json = r#""LOCAL""#;
81 let deserialized: AccessChannel = serde_json::from_str(json).unwrap();
82 assert_eq!(deserialized, AccessChannel::Local);
83 }
84
85 #[test]
86 fn deserialize_access_channel_cloud() {
87 let json = r#""CLOUD""#;
88 let deserialized: AccessChannel = serde_json::from_str(json).unwrap();
89 assert_eq!(deserialized, AccessChannel::Cloud);
90 }
91
92 #[test]
93 fn deserialize_access_channel_unknown_variant() {
94 let json = r#""UNKNOWN""#;
95 let result: Result<AccessChannel, _> = serde_json::from_str(json);
96 assert!(result.is_err());
97 }
98}