rocketmq_remoting/protocol/body/
message_request_mode_serialize_wrapper.rs

1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17use std::collections::HashMap;
18
19use cheetah_string::CheetahString;
20
21use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
22
23pub type MessageRequestModeMap = HashMap<
24    CheetahString, /* Topic */
25    HashMap<CheetahString /* Group */, SetMessageRequestModeRequestBody>,
26>;
27
28#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)]
29#[serde(rename_all = "camelCase")]
30pub struct MessageRequestModeSerializeWrapper {
31    message_request_mode_map: MessageRequestModeMap,
32}
33
34impl MessageRequestModeSerializeWrapper {
35    pub fn new(message_request_mode_map: MessageRequestModeMap) -> Self {
36        Self {
37            message_request_mode_map,
38        }
39    }
40
41    pub fn message_request_mode_map(&self) -> &MessageRequestModeMap {
42        &self.message_request_mode_map
43    }
44
45    pub fn into_inner(self) -> MessageRequestModeMap {
46        self.message_request_mode_map
47    }
48
49    pub fn from_inner(message_request_mode_map: MessageRequestModeMap) -> Self {
50        Self {
51            message_request_mode_map,
52        }
53    }
54
55    pub fn set_message_request_mode_map(&mut self, map: MessageRequestModeMap) {
56        self.message_request_mode_map = map;
57    }
58}
59#[cfg(test)]
60mod tests {
61    use super::*;
62    use crate::protocol::body::set_message_request_mode_request_body::SetMessageRequestModeRequestBody;
63
64    #[test]
65    fn default_creates_wrapper_with_empty_map() {
66        let wrapper = MessageRequestModeSerializeWrapper::default();
67        assert!(wrapper.message_request_mode_map().is_empty());
68    }
69
70    #[test]
71    fn new_creates_wrapper_with_provided_map() {
72        let mut map = MessageRequestModeMap::new();
73        let mut group_map = HashMap::new();
74        group_map.insert(
75            CheetahString::from("group1"),
76            SetMessageRequestModeRequestBody::default(),
77        );
78        map.insert(CheetahString::from("topic1"), group_map);
79
80        let wrapper = MessageRequestModeSerializeWrapper::new(map);
81        assert_eq!(wrapper.message_request_mode_map().len(), 1);
82        assert!(wrapper
83            .message_request_mode_map()
84            .contains_key(&CheetahString::from("topic1")));
85    }
86
87    #[test]
88    fn new_creates_wrapper_with_empty_map() {
89        let map = MessageRequestModeMap::new();
90        let wrapper = MessageRequestModeSerializeWrapper::new(map);
91        assert!(wrapper.message_request_mode_map().is_empty());
92    }
93}