Skip to main content

rocketmq_protocol/protocol/body/
set_message_request_mode_request_body.rs

1// Copyright 2023 The RocketMQ Rust Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use cheetah_string::CheetahString;
16use rocketmq_model::common::message::message_enum::MessageRequestMode;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct SetMessageRequestModeRequestBody {
23    pub topic: CheetahString,
24    pub consumer_group: CheetahString,
25    pub mode: MessageRequestMode,
26    /*
27    consumer working in pop mode could share the MessageQueues assigned to
28    the N (N = popShareQueueNum) consumers following it in the cid list
29     */
30    pub pop_share_queue_num: i32,
31}
32
33impl Default for SetMessageRequestModeRequestBody {
34    fn default() -> Self {
35        SetMessageRequestModeRequestBody {
36            topic: CheetahString::new(),
37            consumer_group: CheetahString::new(),
38            mode: MessageRequestMode::Pull,
39            pop_share_queue_num: 0,
40        }
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use serde_json;
47
48    use super::*;
49
50    #[test]
51    fn serialize_set_message_request_mode_request_body() {
52        let body = SetMessageRequestModeRequestBody {
53            topic: CheetahString::from("test_topic"),
54            consumer_group: CheetahString::from("test_group"),
55            mode: MessageRequestMode::Pop,
56            pop_share_queue_num: 5,
57        };
58        let serialized = serde_json::to_string(&body).unwrap();
59        assert!(serialized.contains("\"topic\":\"test_topic\""));
60        assert!(serialized.contains("\"consumerGroup\":\"test_group\""));
61        assert!(serialized.contains("\"mode\":\"POP\""));
62        assert!(serialized.contains("\"popShareQueueNum\":5"));
63    }
64
65    #[test]
66    fn default_set_message_request_mode_request_body() {
67        let default_body = SetMessageRequestModeRequestBody::default();
68        assert_eq!(default_body.topic, CheetahString::new());
69        assert_eq!(default_body.consumer_group, CheetahString::new());
70        assert_eq!(default_body.mode, MessageRequestMode::Pull);
71        assert_eq!(default_body.pop_share_queue_num, 0);
72    }
73
74    #[test]
75    fn deserialize_set_message_request_mode_request_body() {
76        let json = r#"
77            {
78            "topic": "test_topic",
79            "consumerGroup": "test_group",
80            "mode": "PULL",
81            "popShareQueueNum": 3
82        }"#;
83        let deserialized: SetMessageRequestModeRequestBody = serde_json::from_str(json).unwrap();
84        assert_eq!(deserialized.topic, CheetahString::from("test_topic"));
85        assert_eq!(deserialized.consumer_group, CheetahString::from("test_group"));
86        assert_eq!(deserialized.mode, MessageRequestMode::Pull);
87        assert_eq!(deserialized.pop_share_queue_num, 3);
88    }
89
90    #[test]
91    fn deserialize_set_message_request_mode_request_body_invalid_mode() {
92        let json = r#"{
93                                        "topic": "test_topic",
94                                        "consumerGroup": "test_group",
95                                        "mode": "INVALID",
96                                        "popShareQueueNum": 3
97                                    }"#;
98        let deserialized: Result<SetMessageRequestModeRequestBody, _> = serde_json::from_str(json);
99        assert!(deserialized.is_err());
100    }
101}