rocketmq_protocol/protocol/body/
query_assignment_request_body.rs1use cheetah_string::CheetahString;
16use serde::Deserialize;
17use serde::Serialize;
18
19use crate::protocol::heartbeat::message_model::MessageModel;
20
21#[derive(Debug, Clone, Serialize, Deserialize, Default)]
22#[serde(rename_all = "camelCase")]
23pub struct QueryAssignmentRequestBody {
24 pub topic: CheetahString,
25 pub consumer_group: CheetahString,
26 pub client_id: CheetahString,
27 pub strategy_name: CheetahString,
28 pub message_model: MessageModel,
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn serde_contract_uses_java_field_names_and_round_trips_all_fields() {
37 let body = QueryAssignmentRequestBody {
38 topic: CheetahString::from_static_str("topic-a"),
39 consumer_group: CheetahString::from_static_str("group-a"),
40 client_id: CheetahString::from_static_str("client-a"),
41 strategy_name: CheetahString::from_static_str("AVG"),
42 message_model: MessageModel::Broadcasting,
43 };
44
45 let value = serde_json::to_value(&body).expect("serialize query assignment request");
46 assert_eq!(
47 value,
48 serde_json::json!({
49 "topic": "topic-a",
50 "consumerGroup": "group-a",
51 "clientId": "client-a",
52 "strategyName": "AVG",
53 "messageModel": "BROADCASTING"
54 })
55 );
56
57 let decoded: QueryAssignmentRequestBody =
58 serde_json::from_value(value).expect("deserialize query assignment request");
59 assert_eq!(decoded.topic, body.topic);
60 assert_eq!(decoded.consumer_group, body.consumer_group);
61 assert_eq!(decoded.client_id, body.client_id);
62 assert_eq!(decoded.strategy_name, body.strategy_name);
63 assert_eq!(decoded.message_model, body.message_model);
64 }
65
66 #[test]
67 fn serde_contract_rejects_unknown_message_model() {
68 let value = serde_json::json!({
69 "topic": "topic-a",
70 "consumerGroup": "group-a",
71 "clientId": "client-a",
72 "strategyName": "AVG",
73 "messageModel": "UNKNOWN"
74 });
75
76 assert!(serde_json::from_value::<QueryAssignmentRequestBody>(value).is_err());
77 }
78}