Skip to main content

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