rocketmq_remoting/protocol/header/namesrv/
topic_operation_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodecV2;
17use serde::Deserialize;
18use serde::Serialize;
19
20use crate::rpc::rpc_request_header::RpcRequestHeader;
21
22#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
23#[serde(rename_all = "camelCase")]
24pub struct DeleteTopicFromNamesrvRequestHeader {
25 #[required]
26 pub topic: CheetahString,
27 pub cluster_name: Option<CheetahString>,
28}
29
30impl DeleteTopicFromNamesrvRequestHeader {
31 pub fn new(topic: impl Into<CheetahString>, cluster_name: Option<impl Into<CheetahString>>) -> Self {
32 Self {
33 topic: topic.into(),
34 cluster_name: cluster_name.map(|s| s.into()),
35 }
36 }
37}
38
39#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
40#[serde(rename_all = "camelCase")]
41pub struct RegisterTopicRequestHeader {
42 #[required]
43 pub topic: CheetahString,
44 #[serde(flatten)]
45 pub topic_request: Option<TopicRequestHeader>,
46}
47
48impl RegisterTopicRequestHeader {
49 pub fn new(topic: impl Into<CheetahString>) -> Self {
50 Self {
51 topic: topic.into(),
52 topic_request: None,
53 }
54 }
55}
56
57#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
58pub struct GetTopicsByClusterRequestHeader {
59 #[required]
60 pub cluster: CheetahString,
61}
62
63impl GetTopicsByClusterRequestHeader {
64 pub fn new(cluster: impl Into<CheetahString>) -> Self {
65 Self {
66 cluster: cluster.into(),
67 }
68 }
69}
70
71#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
72#[serde(rename_all = "camelCase")]
73pub struct TopicRequestHeader {
74 pub lo: Option<bool>,
75 #[serde(flatten)]
76 pub rpc: Option<RpcRequestHeader>,
77}
78
79#[cfg(test)]
80mod tests {
81 use cheetah_string::CheetahString;
82
83 use super::*;
84
85 #[test]
86 fn delete_topic_from_namesrv_request_header_new() {
87 let header = DeleteTopicFromNamesrvRequestHeader::new("topic1", Some("cluster1"));
88 assert_eq!(header.topic, CheetahString::from("topic1"));
89 assert_eq!(header.cluster_name, Some(CheetahString::from("cluster1")));
90 }
91
92 #[test]
93 fn delete_topic_from_namesrv_request_header_serialization() {
94 let header = DeleteTopicFromNamesrvRequestHeader::new("topic1", Some("cluster1"));
95 let serialized = serde_json::to_string(&header).unwrap();
96 assert_eq!(serialized, r#"{"topic":"topic1","clusterName":"cluster1"}"#);
97 }
98
99 #[test]
100 fn delete_topic_from_namesrv_request_header_deserialization() {
101 let json = r#"{"topic":"topic1","clusterName":"cluster1"}"#;
102 let deserialized: DeleteTopicFromNamesrvRequestHeader = serde_json::from_str(json).unwrap();
103 assert_eq!(deserialized.topic, CheetahString::from("topic1"));
104 assert_eq!(deserialized.cluster_name, Some(CheetahString::from("cluster1")));
105 }
106
107 #[test]
108 fn register_topic_request_header_new() {
109 let header = RegisterTopicRequestHeader::new("topic1");
110 assert_eq!(header.topic, CheetahString::from("topic1"));
111 assert!(header.topic_request.is_none());
112 }
113
114 #[test]
115 fn register_topic_request_header_serialization() {
116 let header = RegisterTopicRequestHeader::new("topic1");
117 let serialized = serde_json::to_string(&header).unwrap();
118 assert_eq!(serialized, r#"{"topic":"topic1"}"#);
119 }
120
121 #[test]
122 fn get_topics_by_cluster_request_header_new() {
123 let header = GetTopicsByClusterRequestHeader::new("cluster1");
124 assert_eq!(header.cluster, CheetahString::from("cluster1"));
125 }
126
127 #[test]
128 fn get_topics_by_cluster_request_header_serialization() {
129 let header = GetTopicsByClusterRequestHeader::new("cluster1");
130 let serialized = serde_json::to_string(&header).unwrap();
131 assert_eq!(serialized, r#"{"cluster":"cluster1"}"#);
132 }
133
134 #[test]
135 fn get_topics_by_cluster_request_header_deserialization() {
136 let json = r#"{"cluster":"cluster1"}"#;
137 let deserialized: GetTopicsByClusterRequestHeader = serde_json::from_str(json).unwrap();
138 assert_eq!(deserialized.cluster, CheetahString::from("cluster1"));
139 }
140}