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