Skip to main content

rocketmq_remoting/protocol/header/namesrv/
query_data_version_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 cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodecV2;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
21#[serde(rename_all = "camelCase")]
22pub struct QueryDataVersionRequestHeader {
23    #[required]
24    pub broker_name: CheetahString,
25
26    #[required]
27    pub broker_addr: CheetahString,
28
29    #[required]
30    pub cluster_name: CheetahString,
31
32    #[required]
33    pub broker_id: u64,
34}
35
36impl QueryDataVersionRequestHeader {
37    pub fn new(
38        broker_name: impl Into<CheetahString>,
39        broker_addr: impl Into<CheetahString>,
40        cluster_name: impl Into<CheetahString>,
41        broker_id: u64,
42    ) -> Self {
43        Self {
44            broker_name: broker_name.into(),
45            broker_addr: broker_addr.into(),
46            cluster_name: cluster_name.into(),
47            broker_id,
48        }
49    }
50}
51
52#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
53pub struct QueryDataVersionResponseHeader {
54    changed: bool,
55}
56
57impl QueryDataVersionResponseHeader {
58    pub fn new(changed: bool) -> Self {
59        Self { changed }
60    }
61
62    pub fn changed(&self) -> bool {
63        self.changed
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use cheetah_string::CheetahString;
70
71    use super::*;
72
73    #[test]
74    fn query_data_version_request_header_new() {
75        let header = QueryDataVersionRequestHeader::new("broker1", "127.0.0.1", "cluster1", 1);
76        assert_eq!(header.broker_name, CheetahString::from("broker1"));
77        assert_eq!(header.broker_addr, CheetahString::from("127.0.0.1"));
78        assert_eq!(header.cluster_name, CheetahString::from("cluster1"));
79        assert_eq!(header.broker_id, 1);
80    }
81
82    #[test]
83    fn query_data_version_request_header_serialization() {
84        let header = QueryDataVersionRequestHeader::new("broker1", "127.0.0.1", "cluster1", 1);
85        let serialized = serde_json::to_string(&header).unwrap();
86        assert_eq!(
87            serialized,
88            r#"{"brokerName":"broker1","brokerAddr":"127.0.0.1","clusterName":"cluster1","brokerId":1}"#
89        );
90    }
91
92    #[test]
93    fn query_data_version_request_header_deserialization() {
94        let json = r#"{"brokerName":"broker1","brokerAddr":"127.0.0.1","clusterName":"cluster1","brokerId":1}"#;
95        let deserialized: QueryDataVersionRequestHeader = serde_json::from_str(json).unwrap();
96        assert_eq!(deserialized.broker_name, CheetahString::from("broker1"));
97        assert_eq!(deserialized.broker_addr, CheetahString::from("127.0.0.1"));
98        assert_eq!(deserialized.cluster_name, CheetahString::from("cluster1"));
99        assert_eq!(deserialized.broker_id, 1);
100    }
101
102    #[test]
103    fn query_data_version_response_header_new() {
104        let header = QueryDataVersionResponseHeader::new(true);
105        assert!(header.changed);
106    }
107
108    #[test]
109    fn query_data_version_response_header_serialization() {
110        let header = QueryDataVersionResponseHeader::new(true);
111        let serialized = serde_json::to_string(&header).unwrap();
112        assert_eq!(serialized, r#"{"changed":true}"#);
113    }
114
115    #[test]
116    fn query_data_version_response_header_deserialization() {
117        let json = r#"{"changed":true}"#;
118        let deserialized: QueryDataVersionResponseHeader = serde_json::from_str(json).unwrap();
119        assert!(deserialized.changed);
120    }
121}