Skip to main content

rocketmq_remoting/protocol/header/
list_acl_request_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, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
21#[serde(rename_all = "camelCase")]
22pub struct ListAclRequestHeader {
23    pub subject_filter: CheetahString,
24    pub resource_filter: CheetahString,
25}
26
27pub type ListAclsRequestHeader = ListAclRequestHeader;
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32    use cheetah_string::CheetahString;
33
34    #[test]
35    fn list_acl_request_header_default() {
36        let header: ListAclRequestHeader = Default::default();
37        assert_eq!(header.subject_filter, CheetahString::default());
38        assert_eq!(header.resource_filter, CheetahString::default());
39    }
40
41    #[test]
42    fn list_acl_request_header_serialize() {
43        let header = ListAclRequestHeader {
44            subject_filter: CheetahString::from("subjectFilterValue"),
45            resource_filter: CheetahString::from("resourceFilterValue"),
46        };
47
48        let json_str = serde_json::to_string(&header).unwrap();
49
50        // Verify the serialized JSON contains expected fields with camelCase naming
51        assert!(json_str.contains("\"subjectFilter\":\"subjectFilterValue\""));
52        assert!(json_str.contains("\"resourceFilter\":\"resourceFilterValue\""));
53    }
54
55    #[test]
56    fn list_acl_request_header_deserialize() {
57        let json_str = r#"{
58            "subjectFilter": "subjectFilterValue",
59            "resourceFilter": "resourceFilterValue"
60        }"#;
61
62        let header: ListAclRequestHeader = serde_json::from_str(json_str).unwrap();
63
64        assert_eq!(header.subject_filter, CheetahString::from("subjectFilterValue"));
65        assert_eq!(header.resource_filter, CheetahString::from("resourceFilterValue"));
66    }
67
68    #[test]
69    fn list_acl_request_header_clone() {
70        let header = ListAclRequestHeader {
71            subject_filter: CheetahString::from("subjectFilterValue"),
72            resource_filter: CheetahString::from("resourceFilterValue"),
73        };
74
75        let cloned_header = header.clone();
76
77        assert_eq!(header.subject_filter, cloned_header.subject_filter);
78        assert_eq!(header.resource_filter, cloned_header.resource_filter);
79    }
80
81    #[test]
82    fn list_acls_request_header_alias_matches_java_name() {
83        let header = ListAclsRequestHeader {
84            subject_filter: CheetahString::from("subject"),
85            resource_filter: CheetahString::from("resource"),
86        };
87
88        assert_eq!(header.subject_filter, "subject");
89        assert_eq!(header.resource_filter, "resource");
90    }
91}