Skip to main content

rocketmq_protocol/protocol/header/namesrv/
perm_broker_header.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_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
21#[serde(rename_all = "camelCase")]
22#[header(
23    type_id = "rocketmq_protocol::protocol::header::namesrv::perm_broker_header::WipeWritePermOfBrokerRequestHeader",
24    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.WipeWritePermOfBrokerRequestHeader"
25)]
26pub struct WipeWritePermOfBrokerRequestHeader {
27    #[header(required)]
28    pub broker_name: CheetahString,
29}
30
31impl WipeWritePermOfBrokerRequestHeader {
32    pub fn new(broker_name: impl Into<CheetahString>) -> Self {
33        Self {
34            broker_name: broker_name.into(),
35        }
36    }
37}
38
39#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
40#[serde(rename_all = "camelCase")]
41#[header(
42    type_id = "rocketmq_protocol::protocol::header::namesrv::perm_broker_header::WipeWritePermOfBrokerResponseHeader",
43    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.WipeWritePermOfBrokerResponseHeader"
44)]
45pub struct WipeWritePermOfBrokerResponseHeader {
46    #[header(required)]
47    pub wipe_topic_count: i32,
48}
49
50impl WipeWritePermOfBrokerResponseHeader {
51    pub fn new(wipe_topic_count: i32) -> Self {
52        Self { wipe_topic_count }
53    }
54
55    pub fn get_wipe_topic_count(&self) -> i32 {
56        self.wipe_topic_count
57    }
58}
59
60#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
61#[serde(rename_all = "camelCase")]
62#[header(
63    type_id = "rocketmq_protocol::protocol::header::namesrv::perm_broker_header::AddWritePermOfBrokerRequestHeader",
64    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.AddWritePermOfBrokerRequestHeader"
65)]
66pub struct AddWritePermOfBrokerRequestHeader {
67    #[header(required)]
68    pub broker_name: CheetahString,
69}
70
71impl AddWritePermOfBrokerRequestHeader {
72    pub fn new(broker_name: impl Into<CheetahString>) -> Self {
73        Self {
74            broker_name: broker_name.into(),
75        }
76    }
77}
78
79#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
80#[serde(rename_all = "camelCase")]
81#[header(
82    type_id = "rocketmq_protocol::protocol::header::namesrv::perm_broker_header::AddWritePermOfBrokerResponseHeader",
83    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.AddWritePermOfBrokerResponseHeader"
84)]
85pub struct AddWritePermOfBrokerResponseHeader {
86    #[header(required)]
87    pub add_topic_count: i32,
88}
89
90impl AddWritePermOfBrokerResponseHeader {
91    pub fn new(add_topic_count: i32) -> Self {
92        Self { add_topic_count }
93    }
94
95    pub fn get_add_topic_count(&self) -> i32 {
96        self.add_topic_count
97    }
98}
99
100#[cfg(test)]
101mod tests {
102    use super::*;
103
104    #[test]
105    fn permission_headers_use_java_wire_names() {
106        let wipe_request = WipeWritePermOfBrokerRequestHeader::new("broker-a");
107        let wipe_response = WipeWritePermOfBrokerResponseHeader::new(3);
108        let add_request = AddWritePermOfBrokerRequestHeader::new("broker-b");
109        let add_response = AddWritePermOfBrokerResponseHeader::new(5);
110
111        assert_eq!(
112            serde_json::to_string(&wipe_request).unwrap(),
113            r#"{"brokerName":"broker-a"}"#
114        );
115        assert_eq!(
116            serde_json::to_string(&wipe_response).unwrap(),
117            r#"{"wipeTopicCount":3}"#
118        );
119        assert_eq!(
120            serde_json::to_string(&add_request).unwrap(),
121            r#"{"brokerName":"broker-b"}"#
122        );
123        assert_eq!(serde_json::to_string(&add_response).unwrap(), r#"{"addTopicCount":5}"#);
124
125        let wipe_response: WipeWritePermOfBrokerResponseHeader =
126            serde_json::from_str(r#"{"wipeTopicCount":3}"#).unwrap();
127        let add_response: AddWritePermOfBrokerResponseHeader = serde_json::from_str(r#"{"addTopicCount":5}"#).unwrap();
128        assert_eq!(wipe_response.get_wipe_topic_count(), 3);
129        assert_eq!(add_response.get_add_topic_count(), 5);
130    }
131}