use serde::{Deserialize, Serialize};
use crate::{field_access, impl_default, impl_display};
use super::MessageType;
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct Submessage {
msg_type: MessageType,
content: String,
message_id: u64,
sender_id: u64,
id: u64,
}
impl Submessage {
pub const fn new() -> Self {
Self {
msg_type: MessageType::new(),
content: String::new(),
message_id: 0,
sender_id: 0,
id: 0,
}
}
}
field_access! {
Submessage {
msg_type: MessageType,
message_id: u64,
sender_id: u64,
id: u64,
}
}
field_access! {
Submessage {
content: cow { str },
}
}
impl_default!(Submessage);
impl_display!(Submessage);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sub_message() {
let msg_type = MessageType::Channel;
let content = "content";
let message_id = 1;
let sender_id = 2;
let id = 3;
let sub = Submessage::new()
.with_msg_type(msg_type)
.with_content(content)
.with_message_id(message_id)
.with_sender_id(sender_id)
.with_id(id);
let sub_json = sub.to_string();
assert_eq!(sub.msg_type(), msg_type);
assert_eq!(sub.content(), content);
assert_eq!(sub.message_id(), message_id);
assert_eq!(sub.sender_id(), sender_id);
assert_eq!(sub.id(), id);
assert_eq!(serde_json::to_string(&sub).unwrap(), sub_json);
assert_eq!(serde_json::from_str::<Submessage>(&sub_json).unwrap(), sub);
}
}