rocketmq_remoting/protocol/header/
change_invisible_time_request_header.rs1use std::fmt::Display;
16
17use cheetah_string::CheetahString;
18use rocketmq_macros::RequestHeaderCodecV2;
19use serde::Deserialize;
20use serde::Serialize;
21
22use crate::rpc::topic_request_header::TopicRequestHeader;
23
24#[derive(Serialize, Deserialize, Debug, Default, RequestHeaderCodecV2)]
25#[serde(rename_all = "camelCase")]
26pub struct ChangeInvisibleTimeRequestHeader {
27 #[required]
28 pub consumer_group: CheetahString,
29
30 #[required]
31 pub topic: CheetahString,
32
33 #[required]
34 pub queue_id: i32,
35
36 #[required]
38 pub extra_info: CheetahString,
39
40 #[required]
41 pub offset: i64,
42
43 #[required]
44 pub invisible_time: i64,
45 #[serde(flatten)]
46 pub topic_request_header: Option<TopicRequestHeader>,
47}
48
49impl Display for ChangeInvisibleTimeRequestHeader {
50 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51 write!(
52 f,
53 "ChangeInvisibleTimeRequestHeader {{ consumer_group: {}, topic: {}, queue_id: {}, extra_info: {}, offset: \
54 {}, invisible_time: {} }}",
55 self.consumer_group, self.topic, self.queue_id, self.extra_info, self.offset, self.invisible_time
56 )
57 }
58}
59
60#[cfg(test)]
61mod tests {
62 use cheetah_string::CheetahString;
63 use serde_json;
64
65 use super::*;
66
67 #[test]
68 fn change_invisible_time_request_header_display_format() {
69 let header = ChangeInvisibleTimeRequestHeader {
70 consumer_group: CheetahString::from("group1"),
71 topic: CheetahString::from("topic1"),
72 queue_id: 1,
73 extra_info: CheetahString::from("info"),
74 offset: 12345,
75 invisible_time: 67890,
76 topic_request_header: None,
77 };
78 assert_eq!(
79 format!("{}", header),
80 "ChangeInvisibleTimeRequestHeader { consumer_group: group1, topic: topic1, queue_id: 1, extra_info: info, \
81 offset: 12345, invisible_time: 67890 }"
82 );
83 }
84
85 #[test]
86 fn change_invisible_time_request_header_display_format_with_topic_request_header() {
87 let header = ChangeInvisibleTimeRequestHeader {
88 consumer_group: CheetahString::from("group1"),
89 topic: CheetahString::from("topic1"),
90 queue_id: 1,
91 extra_info: CheetahString::from("info"),
92 offset: 12345,
93 invisible_time: 67890,
94 topic_request_header: Some(TopicRequestHeader {
95 rpc_request_header: None,
96 lo: None,
97 }),
98 };
99 assert_eq!(
100 format!("{}", header),
101 "ChangeInvisibleTimeRequestHeader { consumer_group: group1, topic: topic1, queue_id: 1, extra_info: info, \
102 offset: 12345, invisible_time: 67890 }"
103 );
104 }
105
106 #[test]
107 fn change_invisible_time_request_header_serialize() {
108 let header = ChangeInvisibleTimeRequestHeader {
109 consumer_group: CheetahString::from("group1"),
110 topic: CheetahString::from("topic1"),
111 queue_id: 1,
112 extra_info: CheetahString::from("info"),
113 offset: 12345,
114 invisible_time: 67890,
115 topic_request_header: None,
116 };
117 let serialized = serde_json::to_string(&header).unwrap();
118 assert_eq!(
119 serialized,
120 r#"{"consumerGroup":"group1","topic":"topic1","queueId":1,"extraInfo":"info","offset":12345,"invisibleTime":67890}"#
121 );
122 }
123
124 #[test]
125 fn change_invisible_time_request_header_deserialize() {
126 let json = r#"{"consumerGroup":"group1","topic":"topic1","queueId":1,"extraInfo":"info","offset":12345,"invisibleTime":67890}"#;
127 let header: ChangeInvisibleTimeRequestHeader = serde_json::from_str(json).unwrap();
128 assert_eq!(header.consumer_group, CheetahString::from("group1"));
129 assert_eq!(header.topic, CheetahString::from("topic1"));
130 assert_eq!(header.queue_id, 1);
131 assert_eq!(header.extra_info, CheetahString::from("info"));
132 assert_eq!(header.offset, 12345);
133 assert_eq!(header.invisible_time, 67890);
134 }
135}