rocketmq_protocol/protocol/body/
message_request_mode_serialize_wrapper.rs1use std::collections::HashMap;
16
17use cheetah_string::CheetahString;
18
19use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
20
21pub type MessageRequestModeMap =
22 HashMap<CheetahString , HashMap<CheetahString , SetMessageRequestModeRequestBody>>;
23
24#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)]
25#[serde(rename_all = "camelCase")]
26pub struct MessageRequestModeSerializeWrapper {
27 message_request_mode_map: MessageRequestModeMap,
28}
29
30impl MessageRequestModeSerializeWrapper {
31 pub fn new(message_request_mode_map: MessageRequestModeMap) -> Self {
32 Self {
33 message_request_mode_map,
34 }
35 }
36
37 pub fn message_request_mode_map(&self) -> &MessageRequestModeMap {
38 &self.message_request_mode_map
39 }
40
41 pub fn into_inner(self) -> MessageRequestModeMap {
42 self.message_request_mode_map
43 }
44
45 pub fn from_inner(message_request_mode_map: MessageRequestModeMap) -> Self {
46 Self {
47 message_request_mode_map,
48 }
49 }
50
51 pub fn set_message_request_mode_map(&mut self, map: MessageRequestModeMap) {
52 self.message_request_mode_map = map;
53 }
54}
55#[cfg(test)]
56mod tests {
57 use super::*;
58 use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
59
60 #[test]
61 fn wrapper_methods_and_serde_preserve_the_nested_map() {
62 let mut map = MessageRequestModeMap::new();
63 let mut group_map = HashMap::new();
64 group_map.insert(
65 CheetahString::from("group1"),
66 SetMessageRequestModeRequestBody::default(),
67 );
68 map.insert(CheetahString::from("topic1"), group_map);
69
70 let mut wrapper = MessageRequestModeSerializeWrapper::new(map);
71 assert_eq!(wrapper.message_request_mode_map().len(), 1);
72 assert!(wrapper
73 .message_request_mode_map()
74 .contains_key(&CheetahString::from("topic1")));
75
76 let encoded = serde_json::to_vec(&wrapper).expect("serialize request mode map");
77 let decoded: MessageRequestModeSerializeWrapper =
78 serde_json::from_slice(&encoded).expect("deserialize request mode map");
79 wrapper.set_message_request_mode_map(decoded.into_inner());
80 let map = MessageRequestModeSerializeWrapper::from_inner(wrapper.into_inner()).into_inner();
81 let group_map = map
82 .get(&CheetahString::from("topic1"))
83 .expect("topic should survive the round trip");
84 assert!(group_map.contains_key(&CheetahString::from("group1")));
85 }
86}