rocketmq_remoting/protocol/header/
clone_group_offset_request_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(Clone, Debug, Default, Serialize, Deserialize, RequestHeaderCodecV2)]
23#[serde(rename_all = "camelCase")]
24pub struct CloneGroupOffsetRequestHeader {
25 #[required]
26 pub src_group: CheetahString,
27
28 #[required]
29 pub dest_group: CheetahString,
30
31 pub topic: Option<CheetahString>,
32
33 pub offline: bool,
34
35 #[serde(flatten)]
36 pub rpc_request_header: Option<RpcRequestHeader>,
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn clone_group_offset_request_header_round_trips() {
45 let header = CloneGroupOffsetRequestHeader {
46 src_group: CheetahString::from_static_str("src"),
47 dest_group: CheetahString::from_static_str("dest"),
48 topic: Some(CheetahString::from_static_str("topic-a")),
49 offline: true,
50 rpc_request_header: None,
51 };
52
53 let serialized = serde_json::to_string(&header).expect("serialize clone group offset header");
54 assert_eq!(
55 serialized,
56 r#"{"srcGroup":"src","destGroup":"dest","topic":"topic-a","offline":true}"#
57 );
58
59 let decoded: CloneGroupOffsetRequestHeader =
60 serde_json::from_str(&serialized).expect("deserialize clone group offset header");
61 assert_eq!(decoded.src_group, "src");
62 assert_eq!(decoded.dest_group, "dest");
63 assert_eq!(decoded.topic, Some(CheetahString::from_static_str("topic-a")));
64 assert!(decoded.offline);
65 }
66}