use cheetah_string::CheetahString;
use rocketmq_common::common::message::message_enum::MessageRequestMode;
use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetMessageRequestModeRequestBody {
pub topic: CheetahString,
pub consumer_group: CheetahString,
pub mode: MessageRequestMode,
pub pop_share_queue_num: i32,
}
impl Default for SetMessageRequestModeRequestBody {
fn default() -> Self {
SetMessageRequestModeRequestBody {
topic: CheetahString::new(),
consumer_group: CheetahString::new(),
mode: MessageRequestMode::Pull,
pop_share_queue_num: 0,
}
}
}
#[cfg(test)]
mod tests {
use serde_json;
use super::*;
#[test]
fn serialize_set_message_request_mode_request_body() {
let body = SetMessageRequestModeRequestBody {
topic: CheetahString::from("test_topic"),
consumer_group: CheetahString::from("test_group"),
mode: MessageRequestMode::Pop,
pop_share_queue_num: 5,
};
let serialized = serde_json::to_string(&body).unwrap();
assert!(serialized.contains("\"topic\":\"test_topic\""));
assert!(serialized.contains("\"consumerGroup\":\"test_group\""));
assert!(serialized.contains("\"mode\":\"POP\""));
assert!(serialized.contains("\"popShareQueueNum\":5"));
}
#[test]
fn default_set_message_request_mode_request_body() {
let default_body = SetMessageRequestModeRequestBody::default();
assert_eq!(default_body.topic, CheetahString::new());
assert_eq!(default_body.consumer_group, CheetahString::new());
assert_eq!(default_body.mode, MessageRequestMode::Pull);
assert_eq!(default_body.pop_share_queue_num, 0);
}
#[test]
fn deserialize_set_message_request_mode_request_body() {
let json = r#"
{
"topic": "test_topic",
"consumerGroup": "test_group",
"mode": "PULL",
"popShareQueueNum": 3
}"#;
let deserialized: SetMessageRequestModeRequestBody = serde_json::from_str(json).unwrap();
assert_eq!(deserialized.topic, CheetahString::from("test_topic"));
assert_eq!(deserialized.consumer_group, CheetahString::from("test_group"));
assert_eq!(deserialized.mode, MessageRequestMode::Pull);
assert_eq!(deserialized.pop_share_queue_num, 3);
}
#[test]
fn deserialize_set_message_request_mode_request_body_invalid_mode() {
let json = r#"{
"topic": "test_topic",
"consumerGroup": "test_group",
"mode": "INVALID",
"popShareQueueNum": 3
}"#;
let deserialized: Result<SetMessageRequestModeRequestBody, _> = serde_json::from_str(json);
assert!(deserialized.is_err());
}
}