rocketmq_protocol/protocol/header/
get_consumer_status_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20use crate::rpc::topic_request_header::TopicRequestHeader;
21
22#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodec)]
24#[header(
25 type_id = "rocketmq_protocol::protocol::header::get_consumer_status_request_header::GetConsumerStatusRequestHeader",
26 java_class = "org.apache.rocketmq.remoting.protocol.header.GetConsumerStatusRequestHeader",
27 lookup = "scan",
28 fast
29)]
30#[serde(rename_all = "camelCase")]
31pub struct GetConsumerStatusRequestHeader {
32 #[header(required)]
33 pub topic: CheetahString,
34
35 #[header(required)]
36 pub group: CheetahString,
37
38 pub client_addr: Option<CheetahString>,
39
40 #[serde(flatten)]
41 #[header(flatten, presence = "always")]
42 pub topic_request_header: Option<TopicRequestHeader>,
43}
44
45impl GetConsumerStatusRequestHeader {
46 pub fn new(topic: CheetahString, group: CheetahString) -> Self {
47 Self {
48 topic,
49 group,
50 client_addr: None,
51 topic_request_header: None,
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use std::collections::HashMap;
59
60 use super::*;
61 use crate::protocol::command_custom_header::FromMap;
62
63 #[test]
64 fn get_consumer_status_request_header_serialization() {
65 let mut header =
66 GetConsumerStatusRequestHeader::new(CheetahString::from("topic1"), CheetahString::from("group1"));
67 assert_eq!(header.topic, "topic1");
68 assert_eq!(header.group, "group1");
69 assert!(header.client_addr.is_none());
70 assert!(header.topic_request_header.is_none());
71
72 header.client_addr = Some(CheetahString::from("127.0.0.1"));
73 header.topic_request_header = Some(TopicRequestHeader {
74 lo: Some(true),
75 rpc_request_header: Some(crate::rpc::rpc_request_header::RpcRequestHeader {
76 broker_name: Some(CheetahString::from("broker")),
77 ..Default::default()
78 }),
79 });
80 let json = serde_json::to_string(&header).unwrap();
81 assert!(json.contains("\"topic\":\"topic1\""));
82 assert!(json.contains("\"group\":\"group1\""));
83 assert!(json.contains("\"clientAddr\":\"127.0.0.1\""));
84 assert!(json.contains("\"bname\":\"broker\""));
85 assert!(json.contains("\"lo\":true"));
86 }
87
88 #[test]
89 fn get_consumer_status_request_header_deserialization() {
90 let json = r#"{"topic":"topic1","group":"group1","clientAddr":"127.0.0.1","lo":true,"bname":"broker"}"#;
91 let header: GetConsumerStatusRequestHeader = serde_json::from_str(json).unwrap();
92 assert_eq!(header.topic, "topic1");
93 assert_eq!(header.group, "group1");
94 assert_eq!(header.client_addr, Some(CheetahString::from("127.0.0.1")));
95 assert_eq!(
96 header
97 .topic_request_header
98 .unwrap()
99 .rpc_request_header
100 .unwrap()
101 .broker_name,
102 Some(CheetahString::from("broker"))
103 );
104 }
105
106 #[test]
107 fn get_consumer_status_request_header_from_map() {
108 let mut map = HashMap::new();
109 map.insert(CheetahString::from("topic"), CheetahString::from("topic1"));
110 map.insert(CheetahString::from("group"), CheetahString::from("group1"));
111 map.insert(CheetahString::from("clientAddr"), CheetahString::from("127.0.0.1"));
112 map.insert(CheetahString::from("lo"), CheetahString::from("true"));
113 map.insert(CheetahString::from("bname"), CheetahString::from("broker1"));
114
115 let header = <GetConsumerStatusRequestHeader as FromMap>::from(&map).unwrap();
116 assert_eq!(header.topic, "topic1");
117 assert_eq!(header.group, "group1");
118 assert_eq!(header.client_addr, Some(CheetahString::from("127.0.0.1")));
119 assert_eq!(
120 header
121 .topic_request_header
122 .unwrap()
123 .rpc_request_header
124 .unwrap()
125 .broker_name,
126 Some(CheetahString::from("broker1"))
127 );
128 }
129}