rocketmq_remoting/protocol/header/namesrv/
kv_config_header.rs

1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18use cheetah_string::CheetahString;
19use rocketmq_macros::RequestHeaderCodecV2;
20use serde::Deserialize;
21use serde::Serialize;
22
23#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
24pub struct PutKVConfigRequestHeader {
25    #[required]
26    pub namespace: CheetahString,
27
28    #[required]
29    pub key: CheetahString,
30
31    #[required]
32    pub value: CheetahString,
33}
34
35impl PutKVConfigRequestHeader {
36    /// Creates a new instance of `PutKVConfigRequestHeader`.
37    ///
38    /// # Arguments
39    ///
40    /// * `namespace` - The namespace.
41    /// * `key` - The key.
42    /// * `value` - The value.
43    pub fn new(
44        namespace: impl Into<CheetahString>,
45        key: impl Into<CheetahString>,
46        value: impl Into<CheetahString>,
47    ) -> Self {
48        Self {
49            namespace: namespace.into(),
50            key: key.into(),
51            value: value.into(),
52        }
53    }
54}
55
56#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
57pub struct GetKVConfigRequestHeader {
58    #[required]
59    pub namespace: CheetahString,
60
61    #[required]
62    pub key: CheetahString,
63}
64
65impl GetKVConfigRequestHeader {
66    pub fn new(namespace: impl Into<CheetahString>, key: impl Into<CheetahString>) -> Self {
67        Self {
68            namespace: namespace.into(),
69            key: key.into(),
70        }
71    }
72}
73
74#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
75pub struct GetKVConfigResponseHeader {
76    #[required]
77    pub value: Option<CheetahString>,
78}
79
80impl GetKVConfigResponseHeader {
81    pub fn new(value: Option<CheetahString>) -> Self {
82        Self { value }
83    }
84}
85
86#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
87pub struct DeleteKVConfigRequestHeader {
88    #[required]
89    pub namespace: CheetahString,
90
91    #[required]
92    pub key: CheetahString,
93}
94
95impl DeleteKVConfigRequestHeader {
96    pub fn new(namespace: impl Into<CheetahString>, key: impl Into<CheetahString>) -> Self {
97        Self {
98            namespace: namespace.into(),
99            key: key.into(),
100        }
101    }
102}
103
104#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
105pub struct GetKVListByNamespaceRequestHeader {
106    #[required]
107    pub namespace: CheetahString,
108}
109
110impl GetKVListByNamespaceRequestHeader {
111    pub fn new(namespace: impl Into<CheetahString>) -> Self {
112        Self {
113            namespace: namespace.into(),
114        }
115    }
116}
117
118#[cfg(test)]
119mod tests {
120    use cheetah_string::CheetahString;
121
122    use super::*;
123
124    #[test]
125    fn put_kv_config_request_header_new() {
126        let header = PutKVConfigRequestHeader::new("namespace1", "key1", "value1");
127        assert_eq!(header.namespace, CheetahString::from("namespace1"));
128        assert_eq!(header.key, CheetahString::from("key1"));
129        assert_eq!(header.value, CheetahString::from("value1"));
130    }
131
132    #[test]
133    fn put_kv_config_request_header_serialization() {
134        let header = PutKVConfigRequestHeader::new("namespace1", "key1", "value1");
135        let serialized = serde_json::to_string(&header).unwrap();
136        assert_eq!(
137            serialized,
138            r#"{"namespace":"namespace1","key":"key1","value":"value1"}"#
139        );
140    }
141
142    #[test]
143    fn put_kv_config_request_header_deserialization() {
144        let json = r#"{"namespace":"namespace1","key":"key1","value":"value1"}"#;
145        let deserialized: PutKVConfigRequestHeader = serde_json::from_str(json).unwrap();
146        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
147        assert_eq!(deserialized.key, CheetahString::from("key1"));
148        assert_eq!(deserialized.value, CheetahString::from("value1"));
149    }
150
151    #[test]
152    fn get_kv_config_request_header_new() {
153        let header = GetKVConfigRequestHeader::new("namespace1", "key1");
154        assert_eq!(header.namespace, CheetahString::from("namespace1"));
155        assert_eq!(header.key, CheetahString::from("key1"));
156    }
157
158    #[test]
159    fn get_kv_config_request_header_serialization() {
160        let header = GetKVConfigRequestHeader::new("namespace1", "key1");
161        let serialized = serde_json::to_string(&header).unwrap();
162        assert_eq!(serialized, r#"{"namespace":"namespace1","key":"key1"}"#);
163    }
164
165    #[test]
166    fn get_kv_config_request_header_deserialization() {
167        let json = r#"{"namespace":"namespace1","key":"key1"}"#;
168        let deserialized: GetKVConfigRequestHeader = serde_json::from_str(json).unwrap();
169        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
170        assert_eq!(deserialized.key, CheetahString::from("key1"));
171    }
172
173    #[test]
174    fn get_kv_config_response_header_new() {
175        let header = GetKVConfigResponseHeader::new(Some(CheetahString::from("value1")));
176        assert_eq!(header.value, Some(CheetahString::from("value1")));
177    }
178
179    #[test]
180    fn get_kv_config_response_header_serialization() {
181        let header = GetKVConfigResponseHeader::new(Some(CheetahString::from("value1")));
182        let serialized = serde_json::to_string(&header).unwrap();
183        assert_eq!(serialized, r#"{"value":"value1"}"#);
184    }
185
186    #[test]
187    fn get_kv_config_response_header_deserialization() {
188        let json = r#"{"value":"value1"}"#;
189        let deserialized: GetKVConfigResponseHeader = serde_json::from_str(json).unwrap();
190        assert_eq!(deserialized.value, Some(CheetahString::from("value1")));
191    }
192
193    #[test]
194    fn delete_kv_config_request_header_new() {
195        let header = DeleteKVConfigRequestHeader::new("namespace1", "key1");
196        assert_eq!(header.namespace, CheetahString::from("namespace1"));
197        assert_eq!(header.key, CheetahString::from("key1"));
198    }
199
200    #[test]
201    fn delete_kv_config_request_header_serialization() {
202        let header = DeleteKVConfigRequestHeader::new("namespace1", "key1");
203        let serialized = serde_json::to_string(&header).unwrap();
204        assert_eq!(serialized, r#"{"namespace":"namespace1","key":"key1"}"#);
205    }
206
207    #[test]
208    fn delete_kv_config_request_header_deserialization() {
209        let json = r#"{"namespace":"namespace1","key":"key1"}"#;
210        let deserialized: DeleteKVConfigRequestHeader = serde_json::from_str(json).unwrap();
211        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
212        assert_eq!(deserialized.key, CheetahString::from("key1"));
213    }
214
215    #[test]
216    fn get_kv_list_by_namespace_request_header_new() {
217        let header = GetKVListByNamespaceRequestHeader::new("namespace1");
218        assert_eq!(header.namespace, CheetahString::from("namespace1"));
219    }
220
221    #[test]
222    fn get_kv_list_by_namespace_request_header_serialization() {
223        let header = GetKVListByNamespaceRequestHeader::new("namespace1");
224        let serialized = serde_json::to_string(&header).unwrap();
225        assert_eq!(serialized, r#"{"namespace":"namespace1"}"#);
226    }
227
228    #[test]
229    fn get_kv_list_by_namespace_request_header_deserialization() {
230        let json = r#"{"namespace":"namespace1"}"#;
231        let deserialized: GetKVListByNamespaceRequestHeader = serde_json::from_str(json).unwrap();
232        assert_eq!(deserialized.namespace, CheetahString::from("namespace1"));
233    }
234}