Skip to main content

zulip_api/message/update_message_flags/
request.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{field_access, impl_default, impl_display, Flag, Operation};
4
5/// Represents the request for the `Update Message Flags` Zulip API endpoint.
6///
7/// See [update-message-flags](https://zulip.com/api/update-message-flags) for details.
8#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
9pub struct Request {
10    messages: Vec<u64>,
11    op: Operation,
12    flag: Flag,
13}
14
15impl Request {
16    /// Creates a new [Request].
17    pub const fn new() -> Self {
18        Self {
19            messages: Vec::new(),
20            op: Operation::new(),
21            flag: Flag::new(),
22        }
23    }
24}
25
26field_access! {
27    Request {
28        /// An array containing the IDs of the target messages.
29        messages: cow { [u64] },
30    }
31}
32
33field_access! {
34    Request {
35        /// Whether to `add` the flag or `remove` it.
36        op: Operation,
37        /// The flag that should be added/removed.
38        flag: Flag,
39    }
40}
41
42impl_default!(Request);
43impl_display!(Request);
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48
49    #[test]
50    fn test_request() {
51        let messages = [1u64];
52        let op = Operation::new();
53        let flag = Flag::new();
54
55        let request = Request::new()
56            .with_messages(messages.as_ref())
57            .with_op(op)
58            .with_flag(flag);
59        let request_json = request.to_string();
60
61        assert_eq!(serde_json::to_string(&request).unwrap(), request_json);
62        assert_eq!(
63            serde_json::from_str::<Request>(&request_json).unwrap(),
64            request
65        );
66
67        assert_eq!(request.messages(), messages.as_ref());
68        assert_eq!(request.op(), op);
69        assert_eq!(request.flag(), flag);
70    }
71}