zulip_api/message/get_message/
request.rs1use serde::{Deserialize, Serialize};
2
3use crate::{field_access, impl_default, impl_display};
4
5#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
9pub struct Request {
10 #[serde(skip)]
11 message_id: u64,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 apply_markdown: Option<bool>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 allow_empty_topic_name: Option<bool>,
16}
17
18impl Request {
19 pub const fn new() -> Self {
21 Self {
22 message_id: 0,
23 apply_markdown: None,
24 allow_empty_topic_name: None,
25 }
26 }
27}
28
29field_access! {
30 Request {
31 message_id: u64,
33 }
34}
35
36field_access! {
37 Request {
38 apply_markdown: option { bool },
44 allow_empty_topic_name: option { bool },
54 }
55}
56
57impl_default!(Request);
58impl_display!(Request);
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63
64 #[test]
65 fn test_request() {
66 let message_id = 1;
67 let apply_markdown = true;
68 let allow_empty_topic_name = false;
69
70 let mut request = Request::new()
71 .with_message_id(message_id)
72 .with_apply_markdown(apply_markdown)
73 .with_allow_empty_topic_name(allow_empty_topic_name);
74 let request_json = request.to_string();
75
76 assert_eq!(request.message_id(), message_id);
77 assert_eq!(request.apply_markdown(), Some(apply_markdown));
78 assert_eq!(
79 request.allow_empty_topic_name(),
80 Some(allow_empty_topic_name)
81 );
82
83 assert_eq!(serde_json::to_string(&request).unwrap(), request_json);
84 request.set_message_id(0);
85 assert_eq!(
86 serde_json::from_str::<Request>(&request_json).unwrap(),
87 request
88 );
89 }
90}