rocketmq_protocol/protocol/header/
get_topic_stats_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(Serialize, Deserialize, Debug, RequestHeaderCodec)]
23#[header(
24 type_id = "rocketmq_protocol::protocol::header::get_topic_stats_request_header::GetTopicStatsRequestHeader",
25 java_class = "org.apache.rocketmq.remoting.protocol.header.GetTopicStatsInfoRequestHeader"
26)]
27pub struct GetTopicStatsRequestHeader {
28 #[header(required)]
29 #[serde(rename = "topic")]
30 pub topic: CheetahString,
31
32 #[serde(flatten)]
33 #[header(flatten, presence = "always")]
34 pub topic_request_header: Option<TopicRequestHeader>,
35}
36
37#[cfg(test)]
38mod tests {
39 use std::collections::HashMap;
40
41 use super::*;
42 use crate::protocol::command_custom_header::FromMap;
43
44 #[test]
45 fn get_topic_stats_request_header_serialization() {
46 let header = GetTopicStatsRequestHeader {
47 topic: CheetahString::from("topic1"),
48 topic_request_header: None,
49 };
50 let json = serde_json::to_string(&header).unwrap();
51 assert!(json.contains("\"topic\":\"topic1\""));
52 }
53
54 #[test]
55 fn get_topic_stats_request_header_deserialization() {
56 let json = r#"{"topic":"topic1"}"#;
57 let header: GetTopicStatsRequestHeader = serde_json::from_str(json).unwrap();
58 assert_eq!(header.topic, "topic1");
59 }
60
61 #[test]
62 fn get_topic_stats_request_header_from_map() {
63 let mut map = HashMap::new();
64 map.insert(CheetahString::from("topic"), CheetahString::from("topic1"));
65 let header = <GetTopicStatsRequestHeader as FromMap>::from(&map).unwrap();
66 assert_eq!(header.topic, "topic1");
67 }
68}