rocketmq_remoting/protocol/header/
consume_message_directly_result_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodecV2;
17use serde::Deserialize;
18use serde::Serialize;
19
20use crate::rpc::topic_request_header::TopicRequestHeader;
21
22#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
23#[serde(rename_all = "camelCase")]
24pub struct ConsumeMessageDirectlyResultRequestHeader {
25 #[required]
26 pub consumer_group: CheetahString,
27 pub client_id: Option<CheetahString>,
28 pub msg_id: Option<CheetahString>,
29 pub broker_name: Option<CheetahString>,
30 pub topic: Option<CheetahString>,
31 pub topic_sys_flag: Option<i32>,
32 pub group_sys_flag: Option<i32>,
33 #[serde(flatten)]
34 pub topic_request_header: Option<TopicRequestHeader>,
35}
36
37#[cfg(test)]
38mod tests {
39 use cheetah_string::CheetahString;
40
41 use super::*;
42
43 #[test]
44 fn consume_message_directly_result_request_header_serializes_correctly() {
45 let header = ConsumeMessageDirectlyResultRequestHeader {
46 consumer_group: CheetahString::from_static_str("test_group"),
47 client_id: Some(CheetahString::from_static_str("client_id")),
48 msg_id: Some(CheetahString::from_static_str("msg_id")),
49 broker_name: Some(CheetahString::from_static_str("broker_name")),
50 topic: Some(CheetahString::from_static_str("topic")),
51 topic_sys_flag: Some(1),
52 group_sys_flag: Some(2),
53 topic_request_header: None,
54 };
55 let serialized = serde_json::to_string(&header).unwrap();
56 let expected = r#"{"consumerGroup":"test_group","clientId":"client_id","msgId":"msg_id","brokerName":"broker_name","topic":"topic","topicSysFlag":1,"groupSysFlag":2}"#;
57 assert_eq!(serialized, expected);
58 }
59
60 #[test]
61 fn consume_message_directly_result_request_header_deserializes_correctly() {
62 let data = r#"{"consumerGroup":"test_group","clientId":"client_id","msgId":"msg_id","brokerName":"broker_name","topic":"topic","topicSysFlag":1,"groupSysFlag":2}"#;
63 let header: ConsumeMessageDirectlyResultRequestHeader = serde_json::from_str(data).unwrap();
64 assert_eq!(header.consumer_group, CheetahString::from_static_str("test_group"));
65 assert_eq!(header.client_id.unwrap(), CheetahString::from_static_str("client_id"));
66 assert_eq!(header.msg_id.unwrap(), CheetahString::from_static_str("msg_id"));
67 assert_eq!(
68 header.broker_name.unwrap(),
69 CheetahString::from_static_str("broker_name")
70 );
71 assert_eq!(header.topic.unwrap(), CheetahString::from_static_str("topic"));
72 assert_eq!(header.topic_sys_flag.unwrap(), 1);
73 assert_eq!(header.group_sys_flag.unwrap(), 2);
74 }
75
76 #[test]
77 fn consume_message_directly_result_request_header_handles_missing_optional_fields() {
78 let data = r#"{"consumerGroup":"test_group"}"#;
79 let header: ConsumeMessageDirectlyResultRequestHeader = serde_json::from_str(data).unwrap();
80 assert_eq!(header.consumer_group, CheetahString::from_static_str("test_group"));
81 assert!(header.client_id.is_none());
82 assert!(header.msg_id.is_none());
83 assert!(header.broker_name.is_none());
84 assert!(header.topic.is_none());
85 assert!(header.topic_sys_flag.is_none());
86 assert!(header.group_sys_flag.is_none());
87 }
88
89 #[test]
90 fn consume_message_directly_result_request_header_handles_invalid_data() {
91 let data = r#"{"consumerGroup":12345}"#;
92 let result: Result<ConsumeMessageDirectlyResultRequestHeader, _> = serde_json::from_str(data);
93 assert!(result.is_err());
94 }
95}