rtdlib/types/
chat_list.rs

1
2use crate::types::*;
3use crate::errors::*;
4use uuid::Uuid;
5
6
7
8
9use std::fmt::Debug;
10use serde::de::{Deserialize, Deserializer};
11
12
13
14/// TRAIT | Describes a list of chats
15pub trait TDChatList: Debug + RObject {}
16
17/// Describes a list of chats
18#[derive(Debug, Clone, Serialize)]
19#[serde(untagged)]
20pub enum ChatList {
21  #[doc(hidden)] _Default(()),
22  /// A list of chats usually located at the top of the main chat list. Unmuted chats are automatically moved from the Archive to the Main chat list when a new message arrives
23  Archive(ChatListArchive),
24  /// A list of chats belonging to a chat filter
25  Filter(ChatListFilter),
26  /// A main list of chats
27  Main(ChatListMain),
28
29}
30
31impl Default for ChatList {
32  fn default() -> Self { ChatList::_Default(()) }
33}
34
35impl<'de> Deserialize<'de> for ChatList {
36  fn deserialize<D>(deserializer: D) -> Result<ChatList, D::Error> where D: Deserializer<'de> {
37    use serde::de::Error;
38    rtd_enum_deserialize!(
39      ChatList,
40      (chatListArchive, Archive);
41      (chatListFilter, Filter);
42      (chatListMain, Main);
43
44    )(deserializer)
45  }
46}
47
48impl RObject for ChatList {
49  #[doc(hidden)] fn td_name(&self) -> &'static str {
50    match self {
51      ChatList::Archive(t) => t.td_name(),
52      ChatList::Filter(t) => t.td_name(),
53      ChatList::Main(t) => t.td_name(),
54
55      _ => "-1",
56    }
57  }
58  #[doc(hidden)] fn extra(&self) -> Option<String> {
59    match self {
60      ChatList::Archive(t) => t.extra(),
61      ChatList::Filter(t) => t.extra(),
62      ChatList::Main(t) => t.extra(),
63
64      _ => None,
65    }
66  }
67  fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
68}
69
70impl ChatList {
71  pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
72  #[doc(hidden)] pub fn _is_default(&self) -> bool { if let ChatList::_Default(_) = self { true } else { false } }
73
74  pub fn is_archive(&self) -> bool { if let ChatList::Archive(_) = self { true } else { false } }
75  pub fn is_filter(&self) -> bool { if let ChatList::Filter(_) = self { true } else { false } }
76  pub fn is_main(&self) -> bool { if let ChatList::Main(_) = self { true } else { false } }
77
78  pub fn on_archive<F: FnOnce(&ChatListArchive)>(&self, fnc: F) -> &Self { if let ChatList::Archive(t) = self { fnc(t) }; self }
79  pub fn on_filter<F: FnOnce(&ChatListFilter)>(&self, fnc: F) -> &Self { if let ChatList::Filter(t) = self { fnc(t) }; self }
80  pub fn on_main<F: FnOnce(&ChatListMain)>(&self, fnc: F) -> &Self { if let ChatList::Main(t) = self { fnc(t) }; self }
81
82  pub fn as_archive(&self) -> Option<&ChatListArchive> { if let ChatList::Archive(t) = self { return Some(t) } None }
83  pub fn as_filter(&self) -> Option<&ChatListFilter> { if let ChatList::Filter(t) = self { return Some(t) } None }
84  pub fn as_main(&self) -> Option<&ChatListMain> { if let ChatList::Main(t) = self { return Some(t) } None }
85
86
87
88  pub fn archive<T: AsRef<ChatListArchive>>(t: T) -> Self { ChatList::Archive(t.as_ref().clone()) }
89
90  pub fn filter<T: AsRef<ChatListFilter>>(t: T) -> Self { ChatList::Filter(t.as_ref().clone()) }
91
92  pub fn main<T: AsRef<ChatListMain>>(t: T) -> Self { ChatList::Main(t.as_ref().clone()) }
93
94}
95
96impl AsRef<ChatList> for ChatList {
97  fn as_ref(&self) -> &ChatList { self }
98}
99
100
101
102
103
104
105
106/// A list of chats usually located at the top of the main chat list. Unmuted chats are automatically moved from the Archive to the Main chat list when a new message arrives
107#[derive(Debug, Clone, Default, Serialize, Deserialize)]
108pub struct ChatListArchive {
109  #[doc(hidden)]
110  #[serde(rename(serialize = "@type", deserialize = "@type"))]
111  td_name: String,
112  #[doc(hidden)]
113  #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
114  extra: Option<String>,
115  
116}
117
118impl RObject for ChatListArchive {
119  #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListArchive" }
120  #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
121  fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
122}
123
124
125impl TDChatList for ChatListArchive {}
126
127
128
129impl ChatListArchive {
130  pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
131  pub fn builder() -> RTDChatListArchiveBuilder {
132    let mut inner = ChatListArchive::default();
133    inner.td_name = "chatListArchive".to_string();
134    inner.extra = Some(Uuid::new_v4().to_string());
135    RTDChatListArchiveBuilder { inner }
136  }
137
138}
139
140#[doc(hidden)]
141pub struct RTDChatListArchiveBuilder {
142  inner: ChatListArchive
143}
144
145impl RTDChatListArchiveBuilder {
146  pub fn build(&self) -> ChatListArchive { self.inner.clone() }
147
148}
149
150impl AsRef<ChatListArchive> for ChatListArchive {
151  fn as_ref(&self) -> &ChatListArchive { self }
152}
153
154impl AsRef<ChatListArchive> for RTDChatListArchiveBuilder {
155  fn as_ref(&self) -> &ChatListArchive { &self.inner }
156}
157
158
159
160
161
162
163
164/// A list of chats belonging to a chat filter
165#[derive(Debug, Clone, Default, Serialize, Deserialize)]
166pub struct ChatListFilter {
167  #[doc(hidden)]
168  #[serde(rename(serialize = "@type", deserialize = "@type"))]
169  td_name: String,
170  #[doc(hidden)]
171  #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
172  extra: Option<String>,
173  /// Chat filter identifier
174  chat_filter_id: i64,
175  
176}
177
178impl RObject for ChatListFilter {
179  #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListFilter" }
180  #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
181  fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
182}
183
184
185impl TDChatList for ChatListFilter {}
186
187
188
189impl ChatListFilter {
190  pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
191  pub fn builder() -> RTDChatListFilterBuilder {
192    let mut inner = ChatListFilter::default();
193    inner.td_name = "chatListFilter".to_string();
194    inner.extra = Some(Uuid::new_v4().to_string());
195    RTDChatListFilterBuilder { inner }
196  }
197
198  pub fn chat_filter_id(&self) -> i64 { self.chat_filter_id }
199
200}
201
202#[doc(hidden)]
203pub struct RTDChatListFilterBuilder {
204  inner: ChatListFilter
205}
206
207impl RTDChatListFilterBuilder {
208  pub fn build(&self) -> ChatListFilter { self.inner.clone() }
209
210   
211  pub fn chat_filter_id(&mut self, chat_filter_id: i64) -> &mut Self {
212    self.inner.chat_filter_id = chat_filter_id;
213    self
214  }
215
216}
217
218impl AsRef<ChatListFilter> for ChatListFilter {
219  fn as_ref(&self) -> &ChatListFilter { self }
220}
221
222impl AsRef<ChatListFilter> for RTDChatListFilterBuilder {
223  fn as_ref(&self) -> &ChatListFilter { &self.inner }
224}
225
226
227
228
229
230
231
232/// A main list of chats
233#[derive(Debug, Clone, Default, Serialize, Deserialize)]
234pub struct ChatListMain {
235  #[doc(hidden)]
236  #[serde(rename(serialize = "@type", deserialize = "@type"))]
237  td_name: String,
238  #[doc(hidden)]
239  #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
240  extra: Option<String>,
241  
242}
243
244impl RObject for ChatListMain {
245  #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListMain" }
246  #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
247  fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
248}
249
250
251impl TDChatList for ChatListMain {}
252
253
254
255impl ChatListMain {
256  pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
257  pub fn builder() -> RTDChatListMainBuilder {
258    let mut inner = ChatListMain::default();
259    inner.td_name = "chatListMain".to_string();
260    inner.extra = Some(Uuid::new_v4().to_string());
261    RTDChatListMainBuilder { inner }
262  }
263
264}
265
266#[doc(hidden)]
267pub struct RTDChatListMainBuilder {
268  inner: ChatListMain
269}
270
271impl RTDChatListMainBuilder {
272  pub fn build(&self) -> ChatListMain { self.inner.clone() }
273
274}
275
276impl AsRef<ChatListMain> for ChatListMain {
277  fn as_ref(&self) -> &ChatListMain { self }
278}
279
280impl AsRef<ChatListMain> for RTDChatListMainBuilder {
281  fn as_ref(&self) -> &ChatListMain { &self.inner }
282}
283
284
285