rocketmq_protocol/protocol/header/
query_consume_time_span_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20use crate::protocol::header::namesrv::topic_operation_header::TopicRequestHeader;
21
22#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodec)]
23#[header(
24 type_id = "rocketmq_protocol::protocol::header::query_consume_time_span_request_header::QueryConsumeTimeSpanRequestHeader",
25 java_class = "org.apache.rocketmq.remoting.protocol.header.QueryConsumeTimeSpanRequestHeader"
26)]
27#[serde(rename_all = "camelCase")]
28pub struct QueryConsumeTimeSpanRequestHeader {
29 #[header(required)]
30 pub topic: CheetahString,
31
32 #[header(required)]
33 pub group: CheetahString,
34
35 #[serde(flatten)]
36 #[header(flatten, presence = "always")]
37 pub topic_request_header: Option<TopicRequestHeader>,
38}
39
40#[cfg(test)]
41mod tests {
42 use cheetah_string::CheetahString;
43
44 use super::*;
45
46 #[test]
47 fn query_consume_time_span_request_header_serializes_correctly() {
48 let header = QueryConsumeTimeSpanRequestHeader {
49 topic: CheetahString::from_static_str("test_topic"),
50 group: CheetahString::from_static_str("test_group"),
51 topic_request_header: None,
52 };
53 let serialized = serde_json::to_string(&header).unwrap();
54 let expected = r#"{"topic":"test_topic","group":"test_group"}"#;
55 assert_eq!(serialized, expected);
56 }
57
58 #[test]
59 fn query_consume_time_span_request_header_deserializes_correctly() {
60 let data = r#"{"topic":"test_topic","group":"test_group"}"#;
61 let header: QueryConsumeTimeSpanRequestHeader = serde_json::from_str(data).unwrap();
62 assert_eq!(header.topic, CheetahString::from_static_str("test_topic"));
63 assert_eq!(header.group, CheetahString::from_static_str("test_group"));
64 assert!(header.topic_request_header.is_some());
65 }
66
67 #[test]
68 fn query_consume_time_span_request_header_handles_missing_optional_fields() {
69 let data = r#"{"topic":"test_topic","group":"test_group"}"#;
70 let header: QueryConsumeTimeSpanRequestHeader = serde_json::from_str(data).unwrap();
71 assert_eq!(header.topic, CheetahString::from_static_str("test_topic"));
72 assert_eq!(header.group, CheetahString::from_static_str("test_group"));
73 assert!(header.topic_request_header.is_some());
74 }
75
76 #[test]
77 fn query_consume_time_span_request_header_handles_invalid_data() {
78 let data = r#"{"topic":12345,"group":"test_group"}"#;
79 let result: Result<QueryConsumeTimeSpanRequestHeader, _> = serde_json::from_str(data);
80 assert!(result.is_err());
81 }
82}