zulip_api/message/mark_topic_as_read/
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 stream_id: u64,
11 topic_name: String,
12}
13
14impl Request {
15 pub const fn new() -> Self {
17 Self {
18 stream_id: 0,
19 topic_name: String::new(),
20 }
21 }
22}
23
24field_access! {
25 Request {
26 stream_id: u64,
28 }
29}
30
31field_access! {
32 Request {
33 topic_name: cow { str },
42 }
43}
44
45impl_default!(Request);
46impl_display!(Request);
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_request() {
54 let stream_id = 1;
55 let topic_name = "test topic";
56
57 let request = Request::new()
58 .with_stream_id(stream_id)
59 .with_topic_name(topic_name);
60 let request_json = request.to_string();
61
62 assert_eq!(serde_json::to_string(&request).unwrap(), request_json);
63 assert_eq!(
64 serde_json::from_str::<Request>(&request_json).unwrap(),
65 request
66 );
67
68 assert_eq!(request.stream_id(), stream_id);
69 assert_eq!(request.topic_name(), topic_name);
70 }
71}