Skip to main content

rocketmq_protocol/protocol/header/namesrv/
kv_config_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::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
21#[header(
22    type_id = "rocketmq_protocol::protocol::header::namesrv::kv_config_header::PutKVConfigRequestHeader",
23    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.PutKVConfigRequestHeader"
24)]
25pub struct PutKVConfigRequestHeader {
26    #[header(required)]
27    pub namespace: CheetahString,
28
29    #[header(required)]
30    pub key: CheetahString,
31
32    #[header(required)]
33    pub value: CheetahString,
34}
35
36impl PutKVConfigRequestHeader {
37    /// Creates a new instance of `PutKVConfigRequestHeader`.
38    ///
39    /// # Arguments
40    ///
41    /// * `namespace` - The namespace.
42    /// * `key` - The key.
43    /// * `value` - The value.
44    pub fn new(
45        namespace: impl Into<CheetahString>,
46        key: impl Into<CheetahString>,
47        value: impl Into<CheetahString>,
48    ) -> Self {
49        Self {
50            namespace: namespace.into(),
51            key: key.into(),
52            value: value.into(),
53        }
54    }
55}
56
57#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
58#[header(
59    type_id = "rocketmq_protocol::protocol::header::namesrv::kv_config_header::GetKVConfigRequestHeader",
60    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.GetKVConfigRequestHeader"
61)]
62pub struct GetKVConfigRequestHeader {
63    #[header(required)]
64    pub namespace: CheetahString,
65
66    #[header(required)]
67    pub key: CheetahString,
68}
69
70impl GetKVConfigRequestHeader {
71    pub fn new(namespace: impl Into<CheetahString>, key: impl Into<CheetahString>) -> Self {
72        Self {
73            namespace: namespace.into(),
74            key: key.into(),
75        }
76    }
77}
78
79#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
80#[header(
81    type_id = "rocketmq_protocol::protocol::header::namesrv::kv_config_header::GetKVConfigResponseHeader",
82    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.GetKVConfigResponseHeader"
83)]
84pub struct GetKVConfigResponseHeader {
85    pub value: Option<CheetahString>,
86}
87
88impl GetKVConfigResponseHeader {
89    pub fn new(value: Option<CheetahString>) -> Self {
90        Self { value }
91    }
92}
93
94#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
95#[header(
96    type_id = "rocketmq_protocol::protocol::header::namesrv::kv_config_header::DeleteKVConfigRequestHeader",
97    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.DeleteKVConfigRequestHeader"
98)]
99pub struct DeleteKVConfigRequestHeader {
100    #[header(required)]
101    pub namespace: CheetahString,
102
103    #[header(required)]
104    pub key: CheetahString,
105}
106
107impl DeleteKVConfigRequestHeader {
108    pub fn new(namespace: impl Into<CheetahString>, key: impl Into<CheetahString>) -> Self {
109        Self {
110            namespace: namespace.into(),
111            key: key.into(),
112        }
113    }
114}
115
116#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
117#[header(
118    type_id = "rocketmq_protocol::protocol::header::namesrv::kv_config_header::GetKVListByNamespaceRequestHeader",
119    java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.GetKVListByNamespaceRequestHeader"
120)]
121pub struct GetKVListByNamespaceRequestHeader {
122    #[header(required)]
123    pub namespace: CheetahString,
124}
125
126impl GetKVListByNamespaceRequestHeader {
127    pub fn new(namespace: impl Into<CheetahString>) -> Self {
128        Self {
129            namespace: namespace.into(),
130        }
131    }
132}
133
134#[cfg(test)]
135mod tests {
136    use cheetah_string::CheetahString;
137
138    use super::*;
139
140    #[test]
141    fn put_kv_config_request_header_serialization() {
142        let header = PutKVConfigRequestHeader::new("namespace1", "key1", "value1");
143        let serialized = serde_json::to_string(&header).unwrap();
144        assert_eq!(
145            serialized,
146            r#"{"namespace":"namespace1","key":"key1","value":"value1"}"#
147        );
148    }
149
150    #[test]
151    fn put_kv_config_request_header_deserialization() {
152        let json = r#"{"namespace":"namespace1","key":"key1","value":"value1"}"#;
153        let deserialized: PutKVConfigRequestHeader = serde_json::from_str(json).unwrap();
154        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
155        assert_eq!(deserialized.key, CheetahString::from("key1"));
156        assert_eq!(deserialized.value, CheetahString::from("value1"));
157    }
158
159    #[test]
160    fn get_kv_config_request_header_serialization() {
161        let header = GetKVConfigRequestHeader::new("namespace1", "key1");
162        let serialized = serde_json::to_string(&header).unwrap();
163        assert_eq!(serialized, r#"{"namespace":"namespace1","key":"key1"}"#);
164    }
165
166    #[test]
167    fn get_kv_config_request_header_deserialization() {
168        let json = r#"{"namespace":"namespace1","key":"key1"}"#;
169        let deserialized: GetKVConfigRequestHeader = serde_json::from_str(json).unwrap();
170        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
171        assert_eq!(deserialized.key, CheetahString::from("key1"));
172    }
173
174    #[test]
175    fn get_kv_config_response_header_serialization() {
176        let header = GetKVConfigResponseHeader::new(Some(CheetahString::from("value1")));
177        let serialized = serde_json::to_string(&header).unwrap();
178        assert_eq!(serialized, r#"{"value":"value1"}"#);
179    }
180
181    #[test]
182    fn get_kv_config_response_header_deserialization() {
183        let json = r#"{"value":"value1"}"#;
184        let deserialized: GetKVConfigResponseHeader = serde_json::from_str(json).unwrap();
185        assert_eq!(deserialized.value, Some(CheetahString::from("value1")));
186    }
187
188    #[test]
189    fn delete_kv_config_request_header_serialization() {
190        let header = DeleteKVConfigRequestHeader::new("namespace1", "key1");
191        let serialized = serde_json::to_string(&header).unwrap();
192        assert_eq!(serialized, r#"{"namespace":"namespace1","key":"key1"}"#);
193    }
194
195    #[test]
196    fn delete_kv_config_request_header_deserialization() {
197        let json = r#"{"namespace":"namespace1","key":"key1"}"#;
198        let deserialized: DeleteKVConfigRequestHeader = serde_json::from_str(json).unwrap();
199        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
200        assert_eq!(deserialized.key, CheetahString::from("key1"));
201    }
202
203    #[test]
204    fn get_kv_list_by_namespace_request_header_serialization() {
205        let header = GetKVListByNamespaceRequestHeader::new("namespace1");
206        let serialized = serde_json::to_string(&header).unwrap();
207        assert_eq!(serialized, r#"{"namespace":"namespace1"}"#);
208    }
209
210    #[test]
211    fn get_kv_list_by_namespace_request_header_deserialization() {
212        let json = r#"{"namespace":"namespace1"}"#;
213        let deserialized: GetKVListByNamespaceRequestHeader = serde_json::from_str(json).unwrap();
214        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
215    }
216}