rust_tdlib/types/
top_chat_category.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Represents the categories of chats for which a list of frequently used chats can be retrieved
8pub trait TDTopChatCategory: Debug + RObject {}
9
10/// Represents the categories of chats for which a list of frequently used chats can be retrieved
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum TopChatCategory {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// A category containing frequently used private chats with bot users
18    #[serde(rename = "topChatCategoryBots")]
19    Bots(TopChatCategoryBots),
20    /// A category containing frequently used chats used for calls
21    #[serde(rename = "topChatCategoryCalls")]
22    Calls(TopChatCategoryCalls),
23    /// A category containing frequently used channels
24    #[serde(rename = "topChatCategoryChannels")]
25    Channels(TopChatCategoryChannels),
26    /// A category containing frequently used chats used to forward messages
27    #[serde(rename = "topChatCategoryForwardChats")]
28    ForwardChats(TopChatCategoryForwardChats),
29    /// A category containing frequently used basic groups and supergroups
30    #[serde(rename = "topChatCategoryGroups")]
31    Groups(TopChatCategoryGroups),
32    /// A category containing frequently used chats with inline bots sorted by their usage in inline mode
33    #[serde(rename = "topChatCategoryInlineBots")]
34    InlineBots(TopChatCategoryInlineBots),
35    /// A category containing frequently used private chats with non-bot users
36    #[serde(rename = "topChatCategoryUsers")]
37    Users(TopChatCategoryUsers),
38}
39
40impl RObject for TopChatCategory {
41    #[doc(hidden)]
42    fn extra(&self) -> Option<&str> {
43        match self {
44            TopChatCategory::Bots(t) => t.extra(),
45            TopChatCategory::Calls(t) => t.extra(),
46            TopChatCategory::Channels(t) => t.extra(),
47            TopChatCategory::ForwardChats(t) => t.extra(),
48            TopChatCategory::Groups(t) => t.extra(),
49            TopChatCategory::InlineBots(t) => t.extra(),
50            TopChatCategory::Users(t) => t.extra(),
51
52            _ => None,
53        }
54    }
55    #[doc(hidden)]
56    fn client_id(&self) -> Option<i32> {
57        match self {
58            TopChatCategory::Bots(t) => t.client_id(),
59            TopChatCategory::Calls(t) => t.client_id(),
60            TopChatCategory::Channels(t) => t.client_id(),
61            TopChatCategory::ForwardChats(t) => t.client_id(),
62            TopChatCategory::Groups(t) => t.client_id(),
63            TopChatCategory::InlineBots(t) => t.client_id(),
64            TopChatCategory::Users(t) => t.client_id(),
65
66            _ => None,
67        }
68    }
69}
70
71impl TopChatCategory {
72    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
73        Ok(serde_json::from_str(json.as_ref())?)
74    }
75    #[doc(hidden)]
76    pub fn _is_default(&self) -> bool {
77        matches!(self, TopChatCategory::_Default)
78    }
79}
80
81impl AsRef<TopChatCategory> for TopChatCategory {
82    fn as_ref(&self) -> &TopChatCategory {
83        self
84    }
85}
86
87/// A category containing frequently used private chats with bot users
88#[derive(Debug, Clone, Default, Serialize, Deserialize)]
89pub struct TopChatCategoryBots {
90    #[doc(hidden)]
91    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
92    extra: Option<String>,
93    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
94    client_id: Option<i32>,
95}
96
97impl RObject for TopChatCategoryBots {
98    #[doc(hidden)]
99    fn extra(&self) -> Option<&str> {
100        self.extra.as_deref()
101    }
102    #[doc(hidden)]
103    fn client_id(&self) -> Option<i32> {
104        self.client_id
105    }
106}
107
108impl TDTopChatCategory for TopChatCategoryBots {}
109
110impl TopChatCategoryBots {
111    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
112        Ok(serde_json::from_str(json.as_ref())?)
113    }
114    pub fn builder() -> TopChatCategoryBotsBuilder {
115        let mut inner = TopChatCategoryBots::default();
116        inner.extra = Some(Uuid::new_v4().to_string());
117
118        TopChatCategoryBotsBuilder { inner }
119    }
120}
121
122#[doc(hidden)]
123pub struct TopChatCategoryBotsBuilder {
124    inner: TopChatCategoryBots,
125}
126
127#[deprecated]
128pub type RTDTopChatCategoryBotsBuilder = TopChatCategoryBotsBuilder;
129
130impl TopChatCategoryBotsBuilder {
131    pub fn build(&self) -> TopChatCategoryBots {
132        self.inner.clone()
133    }
134}
135
136impl AsRef<TopChatCategoryBots> for TopChatCategoryBots {
137    fn as_ref(&self) -> &TopChatCategoryBots {
138        self
139    }
140}
141
142impl AsRef<TopChatCategoryBots> for TopChatCategoryBotsBuilder {
143    fn as_ref(&self) -> &TopChatCategoryBots {
144        &self.inner
145    }
146}
147
148/// A category containing frequently used chats used for calls
149#[derive(Debug, Clone, Default, Serialize, Deserialize)]
150pub struct TopChatCategoryCalls {
151    #[doc(hidden)]
152    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
153    extra: Option<String>,
154    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
155    client_id: Option<i32>,
156}
157
158impl RObject for TopChatCategoryCalls {
159    #[doc(hidden)]
160    fn extra(&self) -> Option<&str> {
161        self.extra.as_deref()
162    }
163    #[doc(hidden)]
164    fn client_id(&self) -> Option<i32> {
165        self.client_id
166    }
167}
168
169impl TDTopChatCategory for TopChatCategoryCalls {}
170
171impl TopChatCategoryCalls {
172    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
173        Ok(serde_json::from_str(json.as_ref())?)
174    }
175    pub fn builder() -> TopChatCategoryCallsBuilder {
176        let mut inner = TopChatCategoryCalls::default();
177        inner.extra = Some(Uuid::new_v4().to_string());
178
179        TopChatCategoryCallsBuilder { inner }
180    }
181}
182
183#[doc(hidden)]
184pub struct TopChatCategoryCallsBuilder {
185    inner: TopChatCategoryCalls,
186}
187
188#[deprecated]
189pub type RTDTopChatCategoryCallsBuilder = TopChatCategoryCallsBuilder;
190
191impl TopChatCategoryCallsBuilder {
192    pub fn build(&self) -> TopChatCategoryCalls {
193        self.inner.clone()
194    }
195}
196
197impl AsRef<TopChatCategoryCalls> for TopChatCategoryCalls {
198    fn as_ref(&self) -> &TopChatCategoryCalls {
199        self
200    }
201}
202
203impl AsRef<TopChatCategoryCalls> for TopChatCategoryCallsBuilder {
204    fn as_ref(&self) -> &TopChatCategoryCalls {
205        &self.inner
206    }
207}
208
209/// A category containing frequently used channels
210#[derive(Debug, Clone, Default, Serialize, Deserialize)]
211pub struct TopChatCategoryChannels {
212    #[doc(hidden)]
213    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
214    extra: Option<String>,
215    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
216    client_id: Option<i32>,
217}
218
219impl RObject for TopChatCategoryChannels {
220    #[doc(hidden)]
221    fn extra(&self) -> Option<&str> {
222        self.extra.as_deref()
223    }
224    #[doc(hidden)]
225    fn client_id(&self) -> Option<i32> {
226        self.client_id
227    }
228}
229
230impl TDTopChatCategory for TopChatCategoryChannels {}
231
232impl TopChatCategoryChannels {
233    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
234        Ok(serde_json::from_str(json.as_ref())?)
235    }
236    pub fn builder() -> TopChatCategoryChannelsBuilder {
237        let mut inner = TopChatCategoryChannels::default();
238        inner.extra = Some(Uuid::new_v4().to_string());
239
240        TopChatCategoryChannelsBuilder { inner }
241    }
242}
243
244#[doc(hidden)]
245pub struct TopChatCategoryChannelsBuilder {
246    inner: TopChatCategoryChannels,
247}
248
249#[deprecated]
250pub type RTDTopChatCategoryChannelsBuilder = TopChatCategoryChannelsBuilder;
251
252impl TopChatCategoryChannelsBuilder {
253    pub fn build(&self) -> TopChatCategoryChannels {
254        self.inner.clone()
255    }
256}
257
258impl AsRef<TopChatCategoryChannels> for TopChatCategoryChannels {
259    fn as_ref(&self) -> &TopChatCategoryChannels {
260        self
261    }
262}
263
264impl AsRef<TopChatCategoryChannels> for TopChatCategoryChannelsBuilder {
265    fn as_ref(&self) -> &TopChatCategoryChannels {
266        &self.inner
267    }
268}
269
270/// A category containing frequently used chats used to forward messages
271#[derive(Debug, Clone, Default, Serialize, Deserialize)]
272pub struct TopChatCategoryForwardChats {
273    #[doc(hidden)]
274    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
275    extra: Option<String>,
276    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
277    client_id: Option<i32>,
278}
279
280impl RObject for TopChatCategoryForwardChats {
281    #[doc(hidden)]
282    fn extra(&self) -> Option<&str> {
283        self.extra.as_deref()
284    }
285    #[doc(hidden)]
286    fn client_id(&self) -> Option<i32> {
287        self.client_id
288    }
289}
290
291impl TDTopChatCategory for TopChatCategoryForwardChats {}
292
293impl TopChatCategoryForwardChats {
294    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
295        Ok(serde_json::from_str(json.as_ref())?)
296    }
297    pub fn builder() -> TopChatCategoryForwardChatsBuilder {
298        let mut inner = TopChatCategoryForwardChats::default();
299        inner.extra = Some(Uuid::new_v4().to_string());
300
301        TopChatCategoryForwardChatsBuilder { inner }
302    }
303}
304
305#[doc(hidden)]
306pub struct TopChatCategoryForwardChatsBuilder {
307    inner: TopChatCategoryForwardChats,
308}
309
310#[deprecated]
311pub type RTDTopChatCategoryForwardChatsBuilder = TopChatCategoryForwardChatsBuilder;
312
313impl TopChatCategoryForwardChatsBuilder {
314    pub fn build(&self) -> TopChatCategoryForwardChats {
315        self.inner.clone()
316    }
317}
318
319impl AsRef<TopChatCategoryForwardChats> for TopChatCategoryForwardChats {
320    fn as_ref(&self) -> &TopChatCategoryForwardChats {
321        self
322    }
323}
324
325impl AsRef<TopChatCategoryForwardChats> for TopChatCategoryForwardChatsBuilder {
326    fn as_ref(&self) -> &TopChatCategoryForwardChats {
327        &self.inner
328    }
329}
330
331/// A category containing frequently used basic groups and supergroups
332#[derive(Debug, Clone, Default, Serialize, Deserialize)]
333pub struct TopChatCategoryGroups {
334    #[doc(hidden)]
335    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
336    extra: Option<String>,
337    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
338    client_id: Option<i32>,
339}
340
341impl RObject for TopChatCategoryGroups {
342    #[doc(hidden)]
343    fn extra(&self) -> Option<&str> {
344        self.extra.as_deref()
345    }
346    #[doc(hidden)]
347    fn client_id(&self) -> Option<i32> {
348        self.client_id
349    }
350}
351
352impl TDTopChatCategory for TopChatCategoryGroups {}
353
354impl TopChatCategoryGroups {
355    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
356        Ok(serde_json::from_str(json.as_ref())?)
357    }
358    pub fn builder() -> TopChatCategoryGroupsBuilder {
359        let mut inner = TopChatCategoryGroups::default();
360        inner.extra = Some(Uuid::new_v4().to_string());
361
362        TopChatCategoryGroupsBuilder { inner }
363    }
364}
365
366#[doc(hidden)]
367pub struct TopChatCategoryGroupsBuilder {
368    inner: TopChatCategoryGroups,
369}
370
371#[deprecated]
372pub type RTDTopChatCategoryGroupsBuilder = TopChatCategoryGroupsBuilder;
373
374impl TopChatCategoryGroupsBuilder {
375    pub fn build(&self) -> TopChatCategoryGroups {
376        self.inner.clone()
377    }
378}
379
380impl AsRef<TopChatCategoryGroups> for TopChatCategoryGroups {
381    fn as_ref(&self) -> &TopChatCategoryGroups {
382        self
383    }
384}
385
386impl AsRef<TopChatCategoryGroups> for TopChatCategoryGroupsBuilder {
387    fn as_ref(&self) -> &TopChatCategoryGroups {
388        &self.inner
389    }
390}
391
392/// A category containing frequently used chats with inline bots sorted by their usage in inline mode
393#[derive(Debug, Clone, Default, Serialize, Deserialize)]
394pub struct TopChatCategoryInlineBots {
395    #[doc(hidden)]
396    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
397    extra: Option<String>,
398    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
399    client_id: Option<i32>,
400}
401
402impl RObject for TopChatCategoryInlineBots {
403    #[doc(hidden)]
404    fn extra(&self) -> Option<&str> {
405        self.extra.as_deref()
406    }
407    #[doc(hidden)]
408    fn client_id(&self) -> Option<i32> {
409        self.client_id
410    }
411}
412
413impl TDTopChatCategory for TopChatCategoryInlineBots {}
414
415impl TopChatCategoryInlineBots {
416    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
417        Ok(serde_json::from_str(json.as_ref())?)
418    }
419    pub fn builder() -> TopChatCategoryInlineBotsBuilder {
420        let mut inner = TopChatCategoryInlineBots::default();
421        inner.extra = Some(Uuid::new_v4().to_string());
422
423        TopChatCategoryInlineBotsBuilder { inner }
424    }
425}
426
427#[doc(hidden)]
428pub struct TopChatCategoryInlineBotsBuilder {
429    inner: TopChatCategoryInlineBots,
430}
431
432#[deprecated]
433pub type RTDTopChatCategoryInlineBotsBuilder = TopChatCategoryInlineBotsBuilder;
434
435impl TopChatCategoryInlineBotsBuilder {
436    pub fn build(&self) -> TopChatCategoryInlineBots {
437        self.inner.clone()
438    }
439}
440
441impl AsRef<TopChatCategoryInlineBots> for TopChatCategoryInlineBots {
442    fn as_ref(&self) -> &TopChatCategoryInlineBots {
443        self
444    }
445}
446
447impl AsRef<TopChatCategoryInlineBots> for TopChatCategoryInlineBotsBuilder {
448    fn as_ref(&self) -> &TopChatCategoryInlineBots {
449        &self.inner
450    }
451}
452
453/// A category containing frequently used private chats with non-bot users
454#[derive(Debug, Clone, Default, Serialize, Deserialize)]
455pub struct TopChatCategoryUsers {
456    #[doc(hidden)]
457    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
458    extra: Option<String>,
459    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
460    client_id: Option<i32>,
461}
462
463impl RObject for TopChatCategoryUsers {
464    #[doc(hidden)]
465    fn extra(&self) -> Option<&str> {
466        self.extra.as_deref()
467    }
468    #[doc(hidden)]
469    fn client_id(&self) -> Option<i32> {
470        self.client_id
471    }
472}
473
474impl TDTopChatCategory for TopChatCategoryUsers {}
475
476impl TopChatCategoryUsers {
477    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
478        Ok(serde_json::from_str(json.as_ref())?)
479    }
480    pub fn builder() -> TopChatCategoryUsersBuilder {
481        let mut inner = TopChatCategoryUsers::default();
482        inner.extra = Some(Uuid::new_v4().to_string());
483
484        TopChatCategoryUsersBuilder { inner }
485    }
486}
487
488#[doc(hidden)]
489pub struct TopChatCategoryUsersBuilder {
490    inner: TopChatCategoryUsers,
491}
492
493#[deprecated]
494pub type RTDTopChatCategoryUsersBuilder = TopChatCategoryUsersBuilder;
495
496impl TopChatCategoryUsersBuilder {
497    pub fn build(&self) -> TopChatCategoryUsers {
498        self.inner.clone()
499    }
500}
501
502impl AsRef<TopChatCategoryUsers> for TopChatCategoryUsers {
503    fn as_ref(&self) -> &TopChatCategoryUsers {
504        self
505    }
506}
507
508impl AsRef<TopChatCategoryUsers> for TopChatCategoryUsersBuilder {
509    fn as_ref(&self) -> &TopChatCategoryUsers {
510        &self.inner
511    }
512}