zulip_api/message/get_messages/
request.rs1use serde::{Deserialize, Serialize};
2
3use crate::filter::{Anchor, Narrow};
4use crate::{field_access, impl_default, impl_display};
5
6#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
10pub struct Request {
11 #[serde(skip_serializing_if = "Option::is_none")]
12 anchor: Option<Anchor>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 include_anchor: Option<bool>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 num_before: Option<u64>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 num_after: Option<u64>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 narrow: Option<Narrow>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 client_gravatar: Option<bool>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 apply_markdown: Option<bool>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 message_ids: Option<Vec<u64>>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 allow_empty_topic_name: Option<bool>,
29}
30
31impl Request {
32 pub const fn new() -> Self {
34 Self {
35 anchor: None,
36 include_anchor: None,
37 num_before: None,
38 num_after: None,
39 narrow: None,
40 client_gravatar: None,
41 apply_markdown: None,
42 message_ids: None,
43 allow_empty_topic_name: None,
44 }
45 }
46}
47
48field_access! {
49 Request {
50 anchor: option { Anchor },
51 include_anchor: option { bool },
52 num_before: option { u64 },
53 num_after: option { u64 },
54 client_gravatar: option { bool },
55 apply_markdown: option { bool },
56 allow_empty_topic_name: option { bool },
57 }
58}
59
60field_access! {
61 Request {
62 narrow: option_ref { &Narrow, Narrow },
63 }
64}
65
66field_access! {
67 Request {
68 message_ids: option_cow_deref { [u64], Vec<u64> },
69 }
70}
71
72impl_default!(Request);
73impl_display!(Request);
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78
79 #[test]
80 fn test_request_minimal() {
81 let req = Request::new();
82 let req_json = req.to_string();
83
84 assert_eq!(serde_json::to_string(&req).unwrap(), req_json);
85 assert_eq!(serde_json::from_str::<Request>(&req_json).unwrap(), req);
86 }
87
88 #[test]
89 fn test_request_full() {
90 let anchor = Anchor::Newest;
91 let include_anchor = true;
92 let num_before = 1;
93 let num_after = 2;
94 let narrow = Narrow::new();
95 let client_gravatar = true;
96 let apply_markdown = true;
97 let message_ids = vec![3u64];
98 let allow_empty_topic_name = true;
99
100 let req = Request::new()
101 .with_anchor(anchor)
102 .with_include_anchor(include_anchor)
103 .with_num_before(num_before)
104 .with_num_after(num_after)
105 .with_narrow(narrow.clone())
106 .with_client_gravatar(client_gravatar)
107 .with_apply_markdown(apply_markdown)
108 .with_message_ids(message_ids.clone())
109 .with_allow_empty_topic_name(allow_empty_topic_name);
110
111 let req_json = req.to_string();
112
113 assert_eq!(req.anchor(), Some(anchor));
114 assert_eq!(req.include_anchor(), Some(include_anchor));
115 assert_eq!(req.num_before(), Some(num_before));
116 assert_eq!(req.num_after(), Some(num_after));
117 assert_eq!(req.narrow(), Some(&narrow));
118 assert_eq!(req.client_gravatar(), Some(client_gravatar));
119 assert_eq!(req.apply_markdown(), Some(apply_markdown));
120 assert_eq!(req.message_ids(), Some(message_ids.as_ref()));
121 assert_eq!(req.allow_empty_topic_name(), Some(allow_empty_topic_name));
122
123 assert_eq!(serde_json::to_string(&req).unwrap(), req_json);
124 assert_eq!(serde_json::from_str::<Request>(&req_json).unwrap(), req);
125 }
126}