rocketmq_protocol/protocol/header/
pop_lite_message_response_header.rs1use rocketmq_macros::RequestHeaderCodec;
16use std::fmt::Display;
17
18use cheetah_string::CheetahString;
19use serde::Deserialize;
20use serde::Serialize;
21
22#[derive(Clone, Debug, Default, Serialize, Deserialize, RequestHeaderCodec)]
23#[serde(rename_all = "camelCase")]
24#[header(
25 type_id = "rocketmq_protocol::protocol::header::pop_lite_message_response_header::PopLiteMessageResponseHeader",
26 java_class = "org.apache.rocketmq.remoting.protocol.header.PopLiteMessageResponseHeader"
27)]
28pub struct PopLiteMessageResponseHeader {
29 #[header(required)]
30 pub pop_time: i64,
31 #[header(required)]
32 pub invisible_time: i64,
33 #[header(required)]
34 pub revive_qid: i32,
35 pub start_offset_info: Option<CheetahString>,
36 pub msg_offset_info: Option<CheetahString>,
37 pub order_count_info: Option<CheetahString>,
38}
39
40impl Display for PopLiteMessageResponseHeader {
41 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
42 write!(
43 f,
44 "PopLiteMessageResponseHeader [pop_time={}, invisible_time={}, revive_qid={}, start_offset_info={:?}, \
45 msg_offset_info={:?}, order_count_info={:?}]",
46 self.pop_time,
47 self.invisible_time,
48 self.revive_qid,
49 self.start_offset_info,
50 self.msg_offset_info,
51 self.order_count_info
52 )
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59 use crate::protocol::command_custom_header::CommandCustomHeader;
60
61 #[test]
62 fn pop_lite_message_response_header_serializes_to_map() {
63 let header = PopLiteMessageResponseHeader {
64 pop_time: 123,
65 invisible_time: 456,
66 revive_qid: 7,
67 start_offset_info: Some("start".into()),
68 msg_offset_info: Some("msg".into()),
69 order_count_info: Some("order".into()),
70 };
71
72 let map = header.to_map().unwrap();
73 assert_eq!(map.get(&CheetahString::from_static_str("popTime")).unwrap(), "123");
74 assert_eq!(
75 map.get(&CheetahString::from_static_str("invisibleTime")).unwrap(),
76 "456"
77 );
78 assert_eq!(map.get(&CheetahString::from_static_str("reviveQid")).unwrap(), "7");
79 }
80
81 #[test]
82 fn pop_lite_message_response_header_display_contains_fields() {
83 let header = PopLiteMessageResponseHeader {
84 pop_time: 1,
85 invisible_time: 2,
86 revive_qid: 3,
87 start_offset_info: None,
88 msg_offset_info: None,
89 order_count_info: None,
90 };
91
92 let display = format!("{header}");
93 assert!(display.contains("pop_time=1"));
94 assert!(display.contains("invisible_time=2"));
95 assert!(display.contains("revive_qid=3"));
96 }
97}