rocketmq_protocol/protocol/header/namesrv/
register_broker_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
22#[header(
23 type_id = "rocketmq_protocol::protocol::header::namesrv::register_broker_header::RegisterBrokerRequestHeader",
24 java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.RegisterBrokerRequestHeader"
25)]
26pub struct RegisterBrokerRequestHeader {
27 #[serde(rename = "brokerName")]
29 #[header(required)]
30 pub broker_name: CheetahString,
31
32 #[serde(rename = "brokerAddr")]
34 #[header(required)]
35 pub broker_addr: CheetahString,
36
37 #[serde(rename = "clusterName")]
39 #[header(required)]
40 pub cluster_name: CheetahString,
41
42 #[serde(rename = "haServerAddr")]
44 #[header(required)]
45 pub ha_server_addr: CheetahString,
46
47 #[serde(rename = "brokerId")]
49 #[header(required, range = "i64")]
50 pub broker_id: u64,
51
52 #[serde(rename = "heartbeatTimeoutMillis")]
54 pub heartbeat_timeout_millis: Option<i64>,
55
56 #[serde(rename = "enableActingMaster")]
58 pub enable_acting_master: Option<bool>,
59
60 #[header(default, default_semantic = "literal:false")]
62 pub compressed: bool,
63
64 #[serde(rename = "bodyCrc32")]
66 #[header(default, default_semantic = "literal:0", range = "i32")]
67 pub body_crc32: u32,
68}
69
70impl RegisterBrokerRequestHeader {
71 pub fn new(
90 broker_name: CheetahString,
91 broker_addr: CheetahString,
92 cluster_name: CheetahString,
93 ha_server_addr: CheetahString,
94 broker_id: u64,
95 heartbeat_timeout_millis: Option<i64>,
96 enable_acting_master: Option<bool>,
97 compressed: bool,
98 body_crc32: u32,
99 ) -> Self {
100 RegisterBrokerRequestHeader {
101 broker_name,
102 broker_addr,
103 cluster_name,
104 ha_server_addr,
105 broker_id,
106 heartbeat_timeout_millis,
107 enable_acting_master,
108 compressed,
109 body_crc32,
110 }
111 }
112}
113
114#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
115#[serde(rename_all = "camelCase")]
116#[header(
117 type_id = "rocketmq_protocol::protocol::header::namesrv::register_broker_header::RegisterBrokerResponseHeader",
118 java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.RegisterBrokerResponseHeader"
119)]
120pub struct RegisterBrokerResponseHeader {
121 pub ha_server_addr: Option<CheetahString>,
122 pub master_addr: Option<CheetahString>,
123}
124
125impl RegisterBrokerResponseHeader {
126 pub fn new(ha_server_addr: Option<CheetahString>, master_addr: Option<CheetahString>) -> Self {
127 RegisterBrokerResponseHeader {
128 ha_server_addr,
129 master_addr,
130 }
131 }
132}
133
134#[cfg(test)]
135mod tests {
136 use cheetah_string::CheetahString;
137
138 use super::*;
139
140 #[test]
141 fn register_broker_request_header_serialization() {
142 let header = RegisterBrokerRequestHeader::new(
143 CheetahString::from("broker1"),
144 CheetahString::from("127.0.0.1"),
145 CheetahString::from("cluster1"),
146 CheetahString::from("127.0.0.2"),
147 1,
148 Some(3000),
149 Some(true),
150 true,
151 12345,
152 );
153 let serialized = serde_json::to_string(&header).unwrap();
154 assert_eq!(
155 serialized,
156 r#"{"brokerName":"broker1","brokerAddr":"127.0.0.1","clusterName":"cluster1","haServerAddr":"127.0.0.2","brokerId":1,"heartbeatTimeoutMillis":3000,"enableActingMaster":true,"compressed":true,"bodyCrc32":12345}"#
157 );
158 }
159
160 #[test]
161 fn register_broker_request_header_deserialization() {
162 let json = r#"{"brokerName":"broker1","brokerAddr":"127.0.0.1","clusterName":"cluster1","haServerAddr":"127.0.0.2","brokerId":1,"heartbeatTimeoutMillis":3000,"enableActingMaster":true,"compressed":true,"bodyCrc32":12345}"#;
163 let deserialized: RegisterBrokerRequestHeader = serde_json::from_str(json).unwrap();
164 assert_eq!(deserialized.broker_name, CheetahString::from("broker1"));
165 assert_eq!(deserialized.broker_addr, CheetahString::from("127.0.0.1"));
166 assert_eq!(deserialized.cluster_name, CheetahString::from("cluster1"));
167 assert_eq!(deserialized.ha_server_addr, CheetahString::from("127.0.0.2"));
168 assert_eq!(deserialized.broker_id, 1);
169 assert_eq!(deserialized.heartbeat_timeout_millis, Some(3000));
170 assert_eq!(deserialized.enable_acting_master, Some(true));
171 assert!(deserialized.compressed);
172 assert_eq!(deserialized.body_crc32, 12345);
173 }
174
175 #[test]
176 fn register_broker_request_header_deserialization_missing_fields() {
177 let json = r#"{"brokerName":"broker1","brokerAddr":"127.0.0.1","clusterName":"cluster1","haServerAddr":"127.0.0.2","brokerId":1,"compressed":true,"bodyCrc32":12345}"#;
178 let deserialized: RegisterBrokerRequestHeader = serde_json::from_str(json).unwrap();
179 assert_eq!(deserialized.broker_name, CheetahString::from("broker1"));
180 assert_eq!(deserialized.broker_addr, CheetahString::from("127.0.0.1"));
181 assert_eq!(deserialized.cluster_name, CheetahString::from("cluster1"));
182 assert_eq!(deserialized.ha_server_addr, CheetahString::from("127.0.0.2"));
183 assert_eq!(deserialized.broker_id, 1);
184 assert_eq!(deserialized.heartbeat_timeout_millis, None);
185 assert_eq!(deserialized.enable_acting_master, None);
186 assert!(deserialized.compressed);
187 assert_eq!(deserialized.body_crc32, 12345);
188 }
189
190 #[test]
191 fn register_broker_response_header_serialization() {
192 let header = RegisterBrokerResponseHeader::new(
193 Some(CheetahString::from("127.0.0.2")),
194 Some(CheetahString::from("127.0.0.3")),
195 );
196 let serialized = serde_json::to_string(&header).unwrap();
197 assert_eq!(serialized, r#"{"haServerAddr":"127.0.0.2","masterAddr":"127.0.0.3"}"#);
198 }
199
200 #[test]
201 fn register_broker_response_header_deserialization() {
202 let json = r#"{"haServerAddr":"127.0.0.2","masterAddr":"127.0.0.3"}"#;
203 let deserialized: RegisterBrokerResponseHeader = serde_json::from_str(json).unwrap();
204 assert_eq!(deserialized.ha_server_addr, Some(CheetahString::from("127.0.0.2")));
205 assert_eq!(deserialized.master_addr, Some(CheetahString::from("127.0.0.3")));
206 }
207
208 #[test]
209 fn register_broker_response_header_deserialization_missing_fields() {
210 let json = r#"{"haServerAddr":"127.0.0.2"}"#;
211 let deserialized: RegisterBrokerResponseHeader = serde_json::from_str(json).unwrap();
212 assert_eq!(deserialized.ha_server_addr, Some(CheetahString::from("127.0.0.2")));
213 assert_eq!(deserialized.master_addr, None);
214 }
215}