rocketmq_protocol/protocol/header/controller/
alter_sync_state_set_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodec;
17use serde::Deserialize;
18use serde::Serialize;
19
20fn default_invoke_time() -> u64 {
21 rocketmq_model::time::current_millis()
22}
23
24#[derive(Clone, Debug, Serialize, Deserialize, RequestHeaderCodec)]
25#[serde(rename_all = "camelCase")]
26#[header(
27 type_id = "rocketmq_protocol::protocol::header::controller::alter_sync_state_set_request_header::AlterSyncStateSetRequestHeader",
28 java_class = "org.apache.rocketmq.remoting.protocol.header.controller.AlterSyncStateSetRequestHeader"
29)]
30pub struct AlterSyncStateSetRequestHeader {
31 #[header(default, default_semantic = "literal:")]
32 pub broker_name: CheetahString,
33 #[header(default, default_semantic = "literal:0")]
34 pub master_broker_id: i64,
35 #[header(default, default_semantic = "literal:0")]
36 pub master_epoch: i32,
37 #[serde(default = "default_invoke_time")]
38 #[header(
39 default_with = "default_invoke_time",
40 default_semantic = "dynamic:current_time_millis",
41 range = "i64"
42 )]
43 pub invoke_time: u64,
44}
45
46impl Default for AlterSyncStateSetRequestHeader {
47 fn default() -> Self {
48 Self {
49 broker_name: CheetahString::new(),
50 master_broker_id: 0,
51 master_epoch: 0,
52 invoke_time: default_invoke_time(),
53 }
54 }
55}
56
57#[cfg(test)]
58mod tests {
59 use std::collections::HashMap;
60
61 use super::*;
62 use crate::protocol::command_custom_header::CommandCustomHeader;
63 use crate::protocol::command_custom_header::FromMap;
64
65 #[test]
66 fn alter_sync_state_set_request_header_serializes_correctly() {
67 let header = AlterSyncStateSetRequestHeader {
68 broker_name: CheetahString::from_static_str("test_broker"),
69 master_broker_id: 1234567890,
70 master_epoch: 5,
71 invoke_time: 1234567891,
72 };
73 let map = header.to_map().unwrap();
74 assert_eq!(
75 map.get(&CheetahString::from_static_str("brokerName")).unwrap(),
76 "test_broker"
77 );
78 assert_eq!(
79 map.get(&CheetahString::from_static_str("masterBrokerId")).unwrap(),
80 "1234567890"
81 );
82 assert_eq!(map.get(&CheetahString::from_static_str("masterEpoch")).unwrap(), "5");
83 assert_eq!(
84 map.get(&CheetahString::from_static_str("invokeTime")).unwrap(),
85 "1234567891"
86 );
87 }
88
89 #[test]
90 fn alter_sync_state_set_request_header_deserializes_correctly() {
91 let mut map = HashMap::new();
92 map.insert(
93 CheetahString::from_static_str("brokerName"),
94 CheetahString::from_static_str("test_broker"),
95 );
96 map.insert(
97 CheetahString::from_static_str("masterBrokerId"),
98 CheetahString::from_static_str("1234567890"),
99 );
100 map.insert(
101 CheetahString::from_static_str("masterEpoch"),
102 CheetahString::from_static_str("5"),
103 );
104
105 let header = <AlterSyncStateSetRequestHeader as FromMap>::from(&map).unwrap();
106 assert_eq!(header.broker_name, "test_broker");
107 assert_eq!(header.master_broker_id, 1234567890);
108 assert_eq!(header.master_epoch, 5);
109 assert!(header.invoke_time > 0);
110 }
111
112 #[test]
113 fn alter_sync_state_set_request_header_default() {
114 let header = AlterSyncStateSetRequestHeader::default();
115 assert_eq!(header.broker_name, "");
116 assert_eq!(header.master_broker_id, 0);
117 assert_eq!(header.master_epoch, 0);
118 assert!(header.invoke_time > 0);
119 }
120}