1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDTopChatCategory: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum TopChatCategory {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "topChatCategoryBots")]
19 Bots(TopChatCategoryBots),
20 #[serde(rename = "topChatCategoryCalls")]
22 Calls(TopChatCategoryCalls),
23 #[serde(rename = "topChatCategoryChannels")]
25 Channels(TopChatCategoryChannels),
26 #[serde(rename = "topChatCategoryForwardChats")]
28 ForwardChats(TopChatCategoryForwardChats),
29 #[serde(rename = "topChatCategoryGroups")]
31 Groups(TopChatCategoryGroups),
32 #[serde(rename = "topChatCategoryInlineBots")]
34 InlineBots(TopChatCategoryInlineBots),
35 #[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#[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#[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#[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#[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#[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#[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#[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}