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