rocketmq_model/common/lite/
lite_subscription_action.rs1use std::fmt;
16
17use serde::Deserialize;
18use serde::Deserializer;
19use serde::Serialize;
20use serde::Serializer;
21
22#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq, Default)]
23pub enum LiteSubscriptionAction {
24 #[default]
25 PartialAdd,
26 PartialRemove,
27 CompleteAdd,
28 CompleteRemove,
29}
30
31impl Serialize for LiteSubscriptionAction {
32 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
33 where
34 S: Serializer,
35 {
36 let value = match self {
37 LiteSubscriptionAction::PartialAdd => "PARTIAL_ADD",
38 LiteSubscriptionAction::PartialRemove => "PARTIAL_REMOVE",
39 LiteSubscriptionAction::CompleteAdd => "COMPLETE_ADD",
40 LiteSubscriptionAction::CompleteRemove => "COMPLETE_REMOVE",
41 };
42 serializer.serialize_str(value)
43 }
44}
45
46impl<'de> Deserialize<'de> for LiteSubscriptionAction {
47 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
48 where
49 D: Deserializer<'de>,
50 {
51 struct LiteSubscriptionActionVisitor;
52
53 impl serde::de::Visitor<'_> for LiteSubscriptionActionVisitor {
54 type Value = LiteSubscriptionAction;
55
56 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
57 formatter.write_str("a string representing LiteSubscriptionAction")
58 }
59
60 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
61 where
62 E: serde::de::Error,
63 {
64 match value {
65 "PARTIAL_ADD" => Ok(LiteSubscriptionAction::PartialAdd),
66 "PARTIAL_REMOVE" => Ok(LiteSubscriptionAction::PartialRemove),
67 "COMPLETE_ADD" => Ok(LiteSubscriptionAction::CompleteAdd),
68 "COMPLETE_REMOVE" => Ok(LiteSubscriptionAction::CompleteRemove),
69 _ => Err(serde::de::Error::unknown_variant(
70 value,
71 &["PartialAdd", "PartialRemove", "CompleteAdd", "CompleteRemove"],
72 )),
73 }
74 }
75 }
76
77 deserializer.deserialize_str(LiteSubscriptionActionVisitor)
78 }
79}
80
81impl fmt::Display for LiteSubscriptionAction {
82 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
83 match self {
84 LiteSubscriptionAction::PartialAdd => write!(f, "PARTIAL_ADD"),
85 LiteSubscriptionAction::PartialRemove => write!(f, "PARTIAL_REMOVE"),
86 LiteSubscriptionAction::CompleteAdd => write!(f, "COMPLETE_ADD"),
87 LiteSubscriptionAction::CompleteRemove => write!(f, "COMPLETE_REMOVE"),
88 }
89 }
90}
91
92#[cfg(test)]
93mod tests {
94 use super::*;
95
96 #[test]
97 fn lite_subscription_action_serialize() {
98 assert_eq!(
99 serde_json::to_string(&LiteSubscriptionAction::PartialAdd).unwrap(),
100 "\"PARTIAL_ADD\""
101 );
102 assert_eq!(
103 serde_json::to_string(&LiteSubscriptionAction::PartialRemove).unwrap(),
104 "\"PARTIAL_REMOVE\""
105 );
106 assert_eq!(
107 serde_json::to_string(&LiteSubscriptionAction::CompleteAdd).unwrap(),
108 "\"COMPLETE_ADD\""
109 );
110 assert_eq!(
111 serde_json::to_string(&LiteSubscriptionAction::CompleteRemove).unwrap(),
112 "\"COMPLETE_REMOVE\""
113 );
114 }
115
116 #[test]
117 fn lite_subscription_action_deserialize() {
118 assert_eq!(
119 serde_json::from_str::<LiteSubscriptionAction>("\"PARTIAL_ADD\"").unwrap(),
120 LiteSubscriptionAction::PartialAdd
121 );
122 assert_eq!(
123 serde_json::from_str::<LiteSubscriptionAction>("\"PARTIAL_REMOVE\"").unwrap(),
124 LiteSubscriptionAction::PartialRemove
125 );
126 assert_eq!(
127 serde_json::from_str::<LiteSubscriptionAction>("\"COMPLETE_ADD\"").unwrap(),
128 LiteSubscriptionAction::CompleteAdd
129 );
130 assert_eq!(
131 serde_json::from_str::<LiteSubscriptionAction>("\"COMPLETE_REMOVE\"").unwrap(),
132 LiteSubscriptionAction::CompleteRemove
133 );
134 assert!(serde_json::from_str::<LiteSubscriptionAction>("\"unknown\"").is_err());
135 }
136
137 #[test]
138 fn lite_subscription_action_display() {
139 assert_eq!(format!("{}", LiteSubscriptionAction::PartialAdd), "PARTIAL_ADD");
140 assert_eq!(format!("{}", LiteSubscriptionAction::PartialRemove), "PARTIAL_REMOVE");
141 assert_eq!(format!("{}", LiteSubscriptionAction::CompleteAdd), "COMPLETE_ADD");
142 assert_eq!(format!("{}", LiteSubscriptionAction::CompleteRemove), "COMPLETE_REMOVE");
143 }
144
145 #[test]
146 fn lite_subscription_action_default() {
147 assert_eq!(LiteSubscriptionAction::default(), LiteSubscriptionAction::PartialAdd);
148 }
149}