Skip to main content

rocketmq_protocol/protocol/header/
pop_lite_message_response_header.rs

1// Copyright 2023 The RocketMQ Rust Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use 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}