rocketmq_remoting/protocol/body/
consume_queue_data.rs1use std::fmt::Display;
18
19use cheetah_string::CheetahString;
20use serde::Deserialize;
21use serde::Serialize;
22
23#[derive(Debug, Clone, Serialize, Deserialize, Default)]
24#[serde(rename_all = "camelCase")]
25pub struct ConsumeQueueData {
26 pub physic_offset: i64,
27 pub physic_size: i32,
28 pub tags_code: i64,
29 pub extend_data_json: Option<CheetahString>,
30 pub bit_map: Option<CheetahString>,
31 pub eval: bool,
32 pub msg: Option<CheetahString>,
33}
34
35impl Display for ConsumeQueueData {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 write!(
38 f,
39 "ConsumeQueueData [physic_offset={}, physic_size={}, tags_code={}, \
40 extend_data_json={:?}, bit_map={:?}, eval={}, msg={:?}]",
41 self.physic_offset,
42 self.physic_size,
43 self.tags_code,
44 self.extend_data_json,
45 self.bit_map,
46 self.eval,
47 self.msg
48 )
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use cheetah_string::CheetahString;
55
56 use super::*;
57
58 #[test]
59 fn consume_queue_data_display_format() {
60 let data = ConsumeQueueData {
61 physic_offset: 123,
62 physic_size: 456,
63 tags_code: 789,
64 extend_data_json: Some(CheetahString::from("extend_data")),
65 bit_map: Some(CheetahString::from("bit_map")),
66 eval: true,
67 msg: Some(CheetahString::from("message")),
68 };
69 let display = format!("{}", data);
70 assert_eq!(
71 display,
72 "ConsumeQueueData [physic_offset=123, physic_size=456, tags_code=789, \
73 extend_data_json=Some(\"extend_data\"), bit_map=Some(\"bit_map\"), eval=true, \
74 msg=Some(\"message\")]"
75 );
76 }
77
78 #[test]
79 fn consume_queue_data_default_values() {
80 let data: ConsumeQueueData = Default::default();
81 assert_eq!(data.physic_offset, 0);
82 assert_eq!(data.physic_size, 0);
83 assert_eq!(data.tags_code, 0);
84 assert!(data.extend_data_json.is_none());
85 assert!(data.bit_map.is_none());
86 assert!(!data.eval);
87 assert!(data.msg.is_none());
88 }
89
90 #[test]
91 fn consume_queue_data_serialization() {
92 let data = ConsumeQueueData {
93 physic_offset: 123,
94 physic_size: 456,
95 tags_code: 789,
96 extend_data_json: Some(CheetahString::from("extend_data")),
97 bit_map: Some(CheetahString::from("bit_map")),
98 eval: true,
99 msg: Some(CheetahString::from("message")),
100 };
101 let serialized = serde_json::to_string(&data).unwrap();
102 assert_eq!(
103 serialized,
104 r#"{"physicOffset":123,"physicSize":456,"tagsCode":789,"extendDataJson":"extend_data","bitMap":"bit_map","eval":true,"msg":"message"}"#
105 );
106 }
107
108 #[test]
109 fn consume_queue_data_deserialization() {
110 let json = r#"{"physicOffset":123,"physicSize":456,"tagsCode":789,"extendDataJson":"extend_data","bitMap":"bit_map","eval":true,"msg":"message"}"#;
111 let deserialized: ConsumeQueueData = serde_json::from_str(json).unwrap();
112 assert_eq!(deserialized.physic_offset, 123);
113 assert_eq!(deserialized.physic_size, 456);
114 assert_eq!(deserialized.tags_code, 789);
115 assert_eq!(
116 deserialized.extend_data_json.unwrap(),
117 CheetahString::from("extend_data")
118 );
119 assert_eq!(
120 deserialized.bit_map.unwrap(),
121 CheetahString::from("bit_map")
122 );
123 assert!(deserialized.eval);
124 assert_eq!(deserialized.msg.unwrap(), CheetahString::from("message"));
125 }
126
127 #[test]
128 fn consume_queue_data_deserialization_missing_fields() {
129 let json = r#"{"physicOffset":123,"physicSize":456,"tagsCode":789,"eval":false}"#;
130 let deserialized: ConsumeQueueData = serde_json::from_str(json).unwrap();
131 assert_eq!(deserialized.physic_offset, 123);
132 assert_eq!(deserialized.physic_size, 456);
133 assert_eq!(deserialized.tags_code, 789);
134 assert!(deserialized.extend_data_json.is_none());
135 assert!(deserialized.bit_map.is_none());
136 assert!(!deserialized.eval);
137 assert!(deserialized.msg.is_none());
138 }
139}