rocketmq_protocol/protocol/header/
unregister_client_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20use crate::rpc::rpc_request_header::RpcRequestHeader;
21
22#[derive(Debug, Serialize, Deserialize, Default, RequestHeaderCodec)]
23#[header(
24 type_id = "rocketmq_protocol::protocol::header::unregister_client_request_header::UnregisterClientRequestHeader",
25 java_class = "org.apache.rocketmq.remoting.protocol.header.UnregisterClientRequestHeader"
26)]
27pub struct UnregisterClientRequestHeader {
28 #[serde(rename = "clientID", alias = "clientId")]
29 #[header(key = "clientID", alias = "clientId", alias_conflict = "prefer_canonical", required)]
30 pub client_id: CheetahString,
31 pub producer_group: Option<CheetahString>,
32 pub consumer_group: Option<CheetahString>,
33 #[serde(flatten)]
34 #[header(flatten, presence = "always")]
35 pub rpc_request_header: Option<RpcRequestHeader>,
36}
37
38#[cfg(test)]
39mod tests {
40
41 use std::collections::HashMap;
42
43 use cheetah_string::CheetahString;
44
45 use super::*;
46 use crate::protocol::command_custom_header::CommandCustomHeader;
47 use crate::protocol::command_custom_header::FromMap;
48
49 #[test]
50 fn un_register_client_request_header_serializes_correctly() {
51 let header: UnregisterClientRequestHeader = UnregisterClientRequestHeader {
52 client_id: CheetahString::from_static_str("test_client_id"),
53 producer_group: Some(CheetahString::from_static_str("test_producer_group")),
54 consumer_group: Some(CheetahString::from_static_str("test_consumer_group")),
55 rpc_request_header: None,
56 };
57 let map = header.to_map().unwrap();
58 assert_eq!(
59 map.get(&CheetahString::from_static_str("consumerGroup")).unwrap(),
60 "test_consumer_group"
61 );
62 assert_eq!(
63 map.get(&CheetahString::from_static_str("clientID")).unwrap(),
64 "test_client_id"
65 );
66 assert_eq!(
67 map.get(&CheetahString::from_static_str("producerGroup")).unwrap(),
68 "test_producer_group"
69 );
70 assert_eq!(map.get(&CheetahString::from_static_str("rpcRequestHeader")), None);
71 }
72
73 #[test]
74 fn un_register_client_request_header_deserializes_correctly() {
75 let mut map = HashMap::new();
76 map.insert(
77 CheetahString::from_static_str("consumerGroup"),
78 CheetahString::from_static_str("test_consumer_group"),
79 );
80 map.insert(
81 CheetahString::from_static_str("clientID"),
82 CheetahString::from_static_str("test_client_id"),
83 );
84 map.insert(
85 CheetahString::from_static_str("producerGroup"),
86 CheetahString::from_static_str("test_producer_group"),
87 );
88 let header: UnregisterClientRequestHeader = <UnregisterClientRequestHeader as FromMap>::from(&map).unwrap();
89 assert_eq!(header.consumer_group.as_deref(), Some("test_consumer_group"));
90 assert_eq!(header.client_id, "test_client_id");
91 assert_eq!(header.producer_group.as_deref(), Some("test_producer_group"));
92 }
93
94 #[test]
95 fn un_register_client_request_header_missing_optional_fields() {
96 let mut map = HashMap::new();
97 map.insert(
98 CheetahString::from_static_str("clientID"),
99 CheetahString::from_static_str("test_client_id"),
100 );
101
102 let header: UnregisterClientRequestHeader = <UnregisterClientRequestHeader as FromMap>::from(&map).unwrap();
103 assert_eq!(header.client_id, "test_client_id");
104 assert!(header.rpc_request_header.is_some());
105 }
106
107 #[test]
108 fn un_register_client_request_header_accepts_legacy_client_id_key() {
109 let mut map = HashMap::new();
110 map.insert(
111 CheetahString::from_static_str("clientId"),
112 CheetahString::from_static_str("test_client_id"),
113 );
114
115 let header: UnregisterClientRequestHeader = <UnregisterClientRequestHeader as FromMap>::from(&map).unwrap();
116
117 assert_eq!(header.client_id, "test_client_id");
118 }
119
120 #[test]
121 fn un_register_client_request_header_deserialize_from_json() {
122 let data = r#"{"clientID":"test_client_id","consumerGroup":"test_consumer_group"}"#;
123 let header: UnregisterClientRequestHeader = serde_json::from_str(data).unwrap();
124 assert_eq!(header.client_id, CheetahString::from_static_str("test_client_id"));
125 assert_eq!(header.consumer_group.as_deref(), None);
126 assert!(header.rpc_request_header.is_some());
127 }
128}