rust_tdlib/types/
view_messages.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Informs TDLib that messages are being viewed by the user. Sponsored messages must be marked as viewed only when the entire text of the message is shown on the screen (excluding the button). Many useful activities depend on whether the messages are currently being viewed or not (e.g., marking messages as read, incrementing a view counter, updating a view counter, removing deleted messages in supergroups and channels)
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct ViewMessages {
8    #[doc(hidden)]
9    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
10    extra: Option<String>,
11    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
12    client_id: Option<i32>,
13    /// Chat identifier
14
15    #[serde(default)]
16    chat_id: i64,
17    /// If not 0, a message thread identifier in which the messages are being viewed
18
19    #[serde(default)]
20    message_thread_id: i64,
21    /// The identifiers of the messages being viewed
22
23    #[serde(default)]
24    message_ids: Vec<i64>,
25    /// True, if messages in closed chats must be marked as read by the request
26
27    #[serde(default)]
28    force_read: bool,
29
30    #[serde(rename(serialize = "@type"))]
31    td_type: String,
32}
33
34impl RObject for ViewMessages {
35    #[doc(hidden)]
36    fn extra(&self) -> Option<&str> {
37        self.extra.as_deref()
38    }
39    #[doc(hidden)]
40    fn client_id(&self) -> Option<i32> {
41        self.client_id
42    }
43}
44
45impl RFunction for ViewMessages {}
46
47impl ViewMessages {
48    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
49        Ok(serde_json::from_str(json.as_ref())?)
50    }
51    pub fn builder() -> ViewMessagesBuilder {
52        let mut inner = ViewMessages::default();
53        inner.extra = Some(Uuid::new_v4().to_string());
54
55        inner.td_type = "viewMessages".to_string();
56
57        ViewMessagesBuilder { inner }
58    }
59
60    pub fn chat_id(&self) -> i64 {
61        self.chat_id
62    }
63
64    pub fn message_thread_id(&self) -> i64 {
65        self.message_thread_id
66    }
67
68    pub fn message_ids(&self) -> &Vec<i64> {
69        &self.message_ids
70    }
71
72    pub fn force_read(&self) -> bool {
73        self.force_read
74    }
75}
76
77#[doc(hidden)]
78pub struct ViewMessagesBuilder {
79    inner: ViewMessages,
80}
81
82#[deprecated]
83pub type RTDViewMessagesBuilder = ViewMessagesBuilder;
84
85impl ViewMessagesBuilder {
86    pub fn build(&self) -> ViewMessages {
87        self.inner.clone()
88    }
89
90    pub fn chat_id(&mut self, chat_id: i64) -> &mut Self {
91        self.inner.chat_id = chat_id;
92        self
93    }
94
95    pub fn message_thread_id(&mut self, message_thread_id: i64) -> &mut Self {
96        self.inner.message_thread_id = message_thread_id;
97        self
98    }
99
100    pub fn message_ids(&mut self, message_ids: Vec<i64>) -> &mut Self {
101        self.inner.message_ids = message_ids;
102        self
103    }
104
105    pub fn force_read(&mut self, force_read: bool) -> &mut Self {
106        self.inner.force_read = force_read;
107        self
108    }
109}
110
111impl AsRef<ViewMessages> for ViewMessages {
112    fn as_ref(&self) -> &ViewMessages {
113        self
114    }
115}
116
117impl AsRef<ViewMessages> for ViewMessagesBuilder {
118    fn as_ref(&self) -> &ViewMessages {
119        &self.inner
120    }
121}