use cheetah_string::CheetahString;
use rocketmq_macros::RequestHeaderCodec;
use serde::Deserialize;
use serde::Serialize;
#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodec)]
#[serde(rename_all = "camelCase")]
#[header(
type_id = "rocketmq_protocol::protocol::header::recall_message_response_header::RecallMessageResponseHeader",
java_class = "org.apache.rocketmq.remoting.protocol.header.RecallMessageResponseHeader"
)]
pub struct RecallMessageResponseHeader {
#[header(required)]
pub msg_id: CheetahString,
}
impl RecallMessageResponseHeader {
pub fn new(msg_id: impl Into<CheetahString>) -> Self {
Self { msg_id: msg_id.into() }
}
pub fn msg_id(&self) -> &CheetahString {
&self.msg_id
}
pub fn set_msg_id(&mut self, msg_id: impl Into<CheetahString>) {
self.msg_id = msg_id.into();
}
}
impl std::fmt::Display for RecallMessageResponseHeader {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RecallMessageResponseHeader {{ msg_id: {} }}", self.msg_id)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_includes_message_id() {
let mut body = RecallMessageResponseHeader::new("initial_message");
body.set_msg_id("some_message");
let display_output = format!("{}", body);
assert_eq!(display_output, "RecallMessageResponseHeader { msg_id: some_message }");
}
#[test]
fn recall_message_serialisation() {
let body = RecallMessageResponseHeader::new("some_message");
let json = serde_json::to_string(&body).unwrap();
assert!(json.contains("\"msgId\":\"some_message\""));
}
#[test]
fn recall_message_deserialisation() {
let json = r#"{"msgId": "some_message"}"#;
let body: RecallMessageResponseHeader = serde_json::from_str(json).unwrap();
assert_eq!(body.msg_id(), &CheetahString::from("some_message"));
}
}