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