zulip_api/message/
submessage.rs1use serde::{Deserialize, Serialize};
2
3use crate::{field_access, impl_default, impl_display};
4
5use super::MessageType;
6
7#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
9pub struct Submessage {
10 msg_type: MessageType,
11 content: String,
12 message_id: u64,
13 sender_id: u64,
14 id: u64,
15}
16
17impl Submessage {
18 pub const fn new() -> Self {
20 Self {
21 msg_type: MessageType::new(),
22 content: String::new(),
23 message_id: 0,
24 sender_id: 0,
25 id: 0,
26 }
27 }
28}
29
30field_access! {
31 Submessage {
32 msg_type: MessageType,
33 message_id: u64,
34 sender_id: u64,
35 id: u64,
36 }
37}
38
39field_access! {
40 Submessage {
41 content: cow { str },
42 }
43}
44
45impl_default!(Submessage);
46impl_display!(Submessage);
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_sub_message() {
54 let msg_type = MessageType::Channel;
55 let content = "content";
56 let message_id = 1;
57 let sender_id = 2;
58 let id = 3;
59
60 let sub = Submessage::new()
61 .with_msg_type(msg_type)
62 .with_content(content)
63 .with_message_id(message_id)
64 .with_sender_id(sender_id)
65 .with_id(id);
66
67 let sub_json = sub.to_string();
68
69 assert_eq!(sub.msg_type(), msg_type);
70 assert_eq!(sub.content(), content);
71 assert_eq!(sub.message_id(), message_id);
72 assert_eq!(sub.sender_id(), sender_id);
73 assert_eq!(sub.id(), id);
74
75 assert_eq!(serde_json::to_string(&sub).unwrap(), sub_json);
76 assert_eq!(serde_json::from_str::<Submessage>(&sub_json).unwrap(), sub);
77 }
78}