1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDChatMemberStatus: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum ChatMemberStatus {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "chatMemberStatusAdministrator")]
19 Administrator(ChatMemberStatusAdministrator),
20 #[serde(rename = "chatMemberStatusBanned")]
22 Banned(ChatMemberStatusBanned),
23 #[serde(rename = "chatMemberStatusCreator")]
25 Creator(ChatMemberStatusCreator),
26 #[serde(rename = "chatMemberStatusLeft")]
28 Left(ChatMemberStatusLeft),
29 #[serde(rename = "chatMemberStatusMember")]
31 Member(ChatMemberStatusMember),
32 #[serde(rename = "chatMemberStatusRestricted")]
34 Restricted(ChatMemberStatusRestricted),
35}
36
37impl RObject for ChatMemberStatus {
38 #[doc(hidden)]
39 fn extra(&self) -> Option<&str> {
40 match self {
41 ChatMemberStatus::Administrator(t) => t.extra(),
42 ChatMemberStatus::Banned(t) => t.extra(),
43 ChatMemberStatus::Creator(t) => t.extra(),
44 ChatMemberStatus::Left(t) => t.extra(),
45 ChatMemberStatus::Member(t) => t.extra(),
46 ChatMemberStatus::Restricted(t) => t.extra(),
47
48 _ => None,
49 }
50 }
51 #[doc(hidden)]
52 fn client_id(&self) -> Option<i32> {
53 match self {
54 ChatMemberStatus::Administrator(t) => t.client_id(),
55 ChatMemberStatus::Banned(t) => t.client_id(),
56 ChatMemberStatus::Creator(t) => t.client_id(),
57 ChatMemberStatus::Left(t) => t.client_id(),
58 ChatMemberStatus::Member(t) => t.client_id(),
59 ChatMemberStatus::Restricted(t) => t.client_id(),
60
61 _ => None,
62 }
63 }
64}
65
66impl ChatMemberStatus {
67 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
68 Ok(serde_json::from_str(json.as_ref())?)
69 }
70 #[doc(hidden)]
71 pub fn _is_default(&self) -> bool {
72 matches!(self, ChatMemberStatus::_Default)
73 }
74}
75
76impl AsRef<ChatMemberStatus> for ChatMemberStatus {
77 fn as_ref(&self) -> &ChatMemberStatus {
78 self
79 }
80}
81
82#[derive(Debug, Clone, Default, Serialize, Deserialize)]
84pub struct ChatMemberStatusAdministrator {
85 #[doc(hidden)]
86 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
87 extra: Option<String>,
88 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
89 client_id: Option<i32>,
90 #[serde(default)]
93 custom_title: String,
94 #[serde(default)]
97 can_be_edited: bool,
98 #[serde(default)]
101 can_manage_chat: bool,
102 #[serde(default)]
105 can_change_info: bool,
106 #[serde(default)]
109 can_post_messages: bool,
110 #[serde(default)]
113 can_edit_messages: bool,
114 #[serde(default)]
117 can_delete_messages: bool,
118 #[serde(default)]
121 can_invite_users: bool,
122 #[serde(default)]
125 can_restrict_members: bool,
126 #[serde(default)]
129 can_pin_messages: bool,
130 #[serde(default)]
133 can_promote_members: bool,
134 #[serde(default)]
137 can_manage_video_chats: bool,
138 #[serde(default)]
141 is_anonymous: bool,
142}
143
144impl RObject for ChatMemberStatusAdministrator {
145 #[doc(hidden)]
146 fn extra(&self) -> Option<&str> {
147 self.extra.as_deref()
148 }
149 #[doc(hidden)]
150 fn client_id(&self) -> Option<i32> {
151 self.client_id
152 }
153}
154
155impl TDChatMemberStatus for ChatMemberStatusAdministrator {}
156
157impl ChatMemberStatusAdministrator {
158 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
159 Ok(serde_json::from_str(json.as_ref())?)
160 }
161 pub fn builder() -> ChatMemberStatusAdministratorBuilder {
162 let mut inner = ChatMemberStatusAdministrator::default();
163 inner.extra = Some(Uuid::new_v4().to_string());
164
165 ChatMemberStatusAdministratorBuilder { inner }
166 }
167
168 pub fn custom_title(&self) -> &String {
169 &self.custom_title
170 }
171
172 pub fn can_be_edited(&self) -> bool {
173 self.can_be_edited
174 }
175
176 pub fn can_manage_chat(&self) -> bool {
177 self.can_manage_chat
178 }
179
180 pub fn can_change_info(&self) -> bool {
181 self.can_change_info
182 }
183
184 pub fn can_post_messages(&self) -> bool {
185 self.can_post_messages
186 }
187
188 pub fn can_edit_messages(&self) -> bool {
189 self.can_edit_messages
190 }
191
192 pub fn can_delete_messages(&self) -> bool {
193 self.can_delete_messages
194 }
195
196 pub fn can_invite_users(&self) -> bool {
197 self.can_invite_users
198 }
199
200 pub fn can_restrict_members(&self) -> bool {
201 self.can_restrict_members
202 }
203
204 pub fn can_pin_messages(&self) -> bool {
205 self.can_pin_messages
206 }
207
208 pub fn can_promote_members(&self) -> bool {
209 self.can_promote_members
210 }
211
212 pub fn can_manage_video_chats(&self) -> bool {
213 self.can_manage_video_chats
214 }
215
216 pub fn is_anonymous(&self) -> bool {
217 self.is_anonymous
218 }
219}
220
221#[doc(hidden)]
222pub struct ChatMemberStatusAdministratorBuilder {
223 inner: ChatMemberStatusAdministrator,
224}
225
226#[deprecated]
227pub type RTDChatMemberStatusAdministratorBuilder = ChatMemberStatusAdministratorBuilder;
228
229impl ChatMemberStatusAdministratorBuilder {
230 pub fn build(&self) -> ChatMemberStatusAdministrator {
231 self.inner.clone()
232 }
233
234 pub fn custom_title<T: AsRef<str>>(&mut self, custom_title: T) -> &mut Self {
235 self.inner.custom_title = custom_title.as_ref().to_string();
236 self
237 }
238
239 pub fn can_be_edited(&mut self, can_be_edited: bool) -> &mut Self {
240 self.inner.can_be_edited = can_be_edited;
241 self
242 }
243
244 pub fn can_manage_chat(&mut self, can_manage_chat: bool) -> &mut Self {
245 self.inner.can_manage_chat = can_manage_chat;
246 self
247 }
248
249 pub fn can_change_info(&mut self, can_change_info: bool) -> &mut Self {
250 self.inner.can_change_info = can_change_info;
251 self
252 }
253
254 pub fn can_post_messages(&mut self, can_post_messages: bool) -> &mut Self {
255 self.inner.can_post_messages = can_post_messages;
256 self
257 }
258
259 pub fn can_edit_messages(&mut self, can_edit_messages: bool) -> &mut Self {
260 self.inner.can_edit_messages = can_edit_messages;
261 self
262 }
263
264 pub fn can_delete_messages(&mut self, can_delete_messages: bool) -> &mut Self {
265 self.inner.can_delete_messages = can_delete_messages;
266 self
267 }
268
269 pub fn can_invite_users(&mut self, can_invite_users: bool) -> &mut Self {
270 self.inner.can_invite_users = can_invite_users;
271 self
272 }
273
274 pub fn can_restrict_members(&mut self, can_restrict_members: bool) -> &mut Self {
275 self.inner.can_restrict_members = can_restrict_members;
276 self
277 }
278
279 pub fn can_pin_messages(&mut self, can_pin_messages: bool) -> &mut Self {
280 self.inner.can_pin_messages = can_pin_messages;
281 self
282 }
283
284 pub fn can_promote_members(&mut self, can_promote_members: bool) -> &mut Self {
285 self.inner.can_promote_members = can_promote_members;
286 self
287 }
288
289 pub fn can_manage_video_chats(&mut self, can_manage_video_chats: bool) -> &mut Self {
290 self.inner.can_manage_video_chats = can_manage_video_chats;
291 self
292 }
293
294 pub fn is_anonymous(&mut self, is_anonymous: bool) -> &mut Self {
295 self.inner.is_anonymous = is_anonymous;
296 self
297 }
298}
299
300impl AsRef<ChatMemberStatusAdministrator> for ChatMemberStatusAdministrator {
301 fn as_ref(&self) -> &ChatMemberStatusAdministrator {
302 self
303 }
304}
305
306impl AsRef<ChatMemberStatusAdministrator> for ChatMemberStatusAdministratorBuilder {
307 fn as_ref(&self) -> &ChatMemberStatusAdministrator {
308 &self.inner
309 }
310}
311
312#[derive(Debug, Clone, Default, Serialize, Deserialize)]
314pub struct ChatMemberStatusBanned {
315 #[doc(hidden)]
316 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
317 extra: Option<String>,
318 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
319 client_id: Option<i32>,
320 #[serde(default)]
323 banned_until_date: i32,
324}
325
326impl RObject for ChatMemberStatusBanned {
327 #[doc(hidden)]
328 fn extra(&self) -> Option<&str> {
329 self.extra.as_deref()
330 }
331 #[doc(hidden)]
332 fn client_id(&self) -> Option<i32> {
333 self.client_id
334 }
335}
336
337impl TDChatMemberStatus for ChatMemberStatusBanned {}
338
339impl ChatMemberStatusBanned {
340 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
341 Ok(serde_json::from_str(json.as_ref())?)
342 }
343 pub fn builder() -> ChatMemberStatusBannedBuilder {
344 let mut inner = ChatMemberStatusBanned::default();
345 inner.extra = Some(Uuid::new_v4().to_string());
346
347 ChatMemberStatusBannedBuilder { inner }
348 }
349
350 pub fn banned_until_date(&self) -> i32 {
351 self.banned_until_date
352 }
353}
354
355#[doc(hidden)]
356pub struct ChatMemberStatusBannedBuilder {
357 inner: ChatMemberStatusBanned,
358}
359
360#[deprecated]
361pub type RTDChatMemberStatusBannedBuilder = ChatMemberStatusBannedBuilder;
362
363impl ChatMemberStatusBannedBuilder {
364 pub fn build(&self) -> ChatMemberStatusBanned {
365 self.inner.clone()
366 }
367
368 pub fn banned_until_date(&mut self, banned_until_date: i32) -> &mut Self {
369 self.inner.banned_until_date = banned_until_date;
370 self
371 }
372}
373
374impl AsRef<ChatMemberStatusBanned> for ChatMemberStatusBanned {
375 fn as_ref(&self) -> &ChatMemberStatusBanned {
376 self
377 }
378}
379
380impl AsRef<ChatMemberStatusBanned> for ChatMemberStatusBannedBuilder {
381 fn as_ref(&self) -> &ChatMemberStatusBanned {
382 &self.inner
383 }
384}
385
386#[derive(Debug, Clone, Default, Serialize, Deserialize)]
388pub struct ChatMemberStatusCreator {
389 #[doc(hidden)]
390 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
391 extra: Option<String>,
392 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
393 client_id: Option<i32>,
394 #[serde(default)]
397 custom_title: String,
398 #[serde(default)]
401 is_anonymous: bool,
402 #[serde(default)]
405 is_member: bool,
406}
407
408impl RObject for ChatMemberStatusCreator {
409 #[doc(hidden)]
410 fn extra(&self) -> Option<&str> {
411 self.extra.as_deref()
412 }
413 #[doc(hidden)]
414 fn client_id(&self) -> Option<i32> {
415 self.client_id
416 }
417}
418
419impl TDChatMemberStatus for ChatMemberStatusCreator {}
420
421impl ChatMemberStatusCreator {
422 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
423 Ok(serde_json::from_str(json.as_ref())?)
424 }
425 pub fn builder() -> ChatMemberStatusCreatorBuilder {
426 let mut inner = ChatMemberStatusCreator::default();
427 inner.extra = Some(Uuid::new_v4().to_string());
428
429 ChatMemberStatusCreatorBuilder { inner }
430 }
431
432 pub fn custom_title(&self) -> &String {
433 &self.custom_title
434 }
435
436 pub fn is_anonymous(&self) -> bool {
437 self.is_anonymous
438 }
439
440 pub fn is_member(&self) -> bool {
441 self.is_member
442 }
443}
444
445#[doc(hidden)]
446pub struct ChatMemberStatusCreatorBuilder {
447 inner: ChatMemberStatusCreator,
448}
449
450#[deprecated]
451pub type RTDChatMemberStatusCreatorBuilder = ChatMemberStatusCreatorBuilder;
452
453impl ChatMemberStatusCreatorBuilder {
454 pub fn build(&self) -> ChatMemberStatusCreator {
455 self.inner.clone()
456 }
457
458 pub fn custom_title<T: AsRef<str>>(&mut self, custom_title: T) -> &mut Self {
459 self.inner.custom_title = custom_title.as_ref().to_string();
460 self
461 }
462
463 pub fn is_anonymous(&mut self, is_anonymous: bool) -> &mut Self {
464 self.inner.is_anonymous = is_anonymous;
465 self
466 }
467
468 pub fn is_member(&mut self, is_member: bool) -> &mut Self {
469 self.inner.is_member = is_member;
470 self
471 }
472}
473
474impl AsRef<ChatMemberStatusCreator> for ChatMemberStatusCreator {
475 fn as_ref(&self) -> &ChatMemberStatusCreator {
476 self
477 }
478}
479
480impl AsRef<ChatMemberStatusCreator> for ChatMemberStatusCreatorBuilder {
481 fn as_ref(&self) -> &ChatMemberStatusCreator {
482 &self.inner
483 }
484}
485
486#[derive(Debug, Clone, Default, Serialize, Deserialize)]
488pub struct ChatMemberStatusLeft {
489 #[doc(hidden)]
490 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
491 extra: Option<String>,
492 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
493 client_id: Option<i32>,
494}
495
496impl RObject for ChatMemberStatusLeft {
497 #[doc(hidden)]
498 fn extra(&self) -> Option<&str> {
499 self.extra.as_deref()
500 }
501 #[doc(hidden)]
502 fn client_id(&self) -> Option<i32> {
503 self.client_id
504 }
505}
506
507impl TDChatMemberStatus for ChatMemberStatusLeft {}
508
509impl ChatMemberStatusLeft {
510 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
511 Ok(serde_json::from_str(json.as_ref())?)
512 }
513 pub fn builder() -> ChatMemberStatusLeftBuilder {
514 let mut inner = ChatMemberStatusLeft::default();
515 inner.extra = Some(Uuid::new_v4().to_string());
516
517 ChatMemberStatusLeftBuilder { inner }
518 }
519}
520
521#[doc(hidden)]
522pub struct ChatMemberStatusLeftBuilder {
523 inner: ChatMemberStatusLeft,
524}
525
526#[deprecated]
527pub type RTDChatMemberStatusLeftBuilder = ChatMemberStatusLeftBuilder;
528
529impl ChatMemberStatusLeftBuilder {
530 pub fn build(&self) -> ChatMemberStatusLeft {
531 self.inner.clone()
532 }
533}
534
535impl AsRef<ChatMemberStatusLeft> for ChatMemberStatusLeft {
536 fn as_ref(&self) -> &ChatMemberStatusLeft {
537 self
538 }
539}
540
541impl AsRef<ChatMemberStatusLeft> for ChatMemberStatusLeftBuilder {
542 fn as_ref(&self) -> &ChatMemberStatusLeft {
543 &self.inner
544 }
545}
546
547#[derive(Debug, Clone, Default, Serialize, Deserialize)]
549pub struct ChatMemberStatusMember {
550 #[doc(hidden)]
551 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
552 extra: Option<String>,
553 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
554 client_id: Option<i32>,
555}
556
557impl RObject for ChatMemberStatusMember {
558 #[doc(hidden)]
559 fn extra(&self) -> Option<&str> {
560 self.extra.as_deref()
561 }
562 #[doc(hidden)]
563 fn client_id(&self) -> Option<i32> {
564 self.client_id
565 }
566}
567
568impl TDChatMemberStatus for ChatMemberStatusMember {}
569
570impl ChatMemberStatusMember {
571 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
572 Ok(serde_json::from_str(json.as_ref())?)
573 }
574 pub fn builder() -> ChatMemberStatusMemberBuilder {
575 let mut inner = ChatMemberStatusMember::default();
576 inner.extra = Some(Uuid::new_v4().to_string());
577
578 ChatMemberStatusMemberBuilder { inner }
579 }
580}
581
582#[doc(hidden)]
583pub struct ChatMemberStatusMemberBuilder {
584 inner: ChatMemberStatusMember,
585}
586
587#[deprecated]
588pub type RTDChatMemberStatusMemberBuilder = ChatMemberStatusMemberBuilder;
589
590impl ChatMemberStatusMemberBuilder {
591 pub fn build(&self) -> ChatMemberStatusMember {
592 self.inner.clone()
593 }
594}
595
596impl AsRef<ChatMemberStatusMember> for ChatMemberStatusMember {
597 fn as_ref(&self) -> &ChatMemberStatusMember {
598 self
599 }
600}
601
602impl AsRef<ChatMemberStatusMember> for ChatMemberStatusMemberBuilder {
603 fn as_ref(&self) -> &ChatMemberStatusMember {
604 &self.inner
605 }
606}
607
608#[derive(Debug, Clone, Default, Serialize, Deserialize)]
610pub struct ChatMemberStatusRestricted {
611 #[doc(hidden)]
612 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
613 extra: Option<String>,
614 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
615 client_id: Option<i32>,
616 #[serde(default)]
619 is_member: bool,
620 #[serde(default)]
623 restricted_until_date: i32,
624 permissions: ChatPermissions,
626}
627
628impl RObject for ChatMemberStatusRestricted {
629 #[doc(hidden)]
630 fn extra(&self) -> Option<&str> {
631 self.extra.as_deref()
632 }
633 #[doc(hidden)]
634 fn client_id(&self) -> Option<i32> {
635 self.client_id
636 }
637}
638
639impl TDChatMemberStatus for ChatMemberStatusRestricted {}
640
641impl ChatMemberStatusRestricted {
642 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
643 Ok(serde_json::from_str(json.as_ref())?)
644 }
645 pub fn builder() -> ChatMemberStatusRestrictedBuilder {
646 let mut inner = ChatMemberStatusRestricted::default();
647 inner.extra = Some(Uuid::new_v4().to_string());
648
649 ChatMemberStatusRestrictedBuilder { inner }
650 }
651
652 pub fn is_member(&self) -> bool {
653 self.is_member
654 }
655
656 pub fn restricted_until_date(&self) -> i32 {
657 self.restricted_until_date
658 }
659
660 pub fn permissions(&self) -> &ChatPermissions {
661 &self.permissions
662 }
663}
664
665#[doc(hidden)]
666pub struct ChatMemberStatusRestrictedBuilder {
667 inner: ChatMemberStatusRestricted,
668}
669
670#[deprecated]
671pub type RTDChatMemberStatusRestrictedBuilder = ChatMemberStatusRestrictedBuilder;
672
673impl ChatMemberStatusRestrictedBuilder {
674 pub fn build(&self) -> ChatMemberStatusRestricted {
675 self.inner.clone()
676 }
677
678 pub fn is_member(&mut self, is_member: bool) -> &mut Self {
679 self.inner.is_member = is_member;
680 self
681 }
682
683 pub fn restricted_until_date(&mut self, restricted_until_date: i32) -> &mut Self {
684 self.inner.restricted_until_date = restricted_until_date;
685 self
686 }
687
688 pub fn permissions<T: AsRef<ChatPermissions>>(&mut self, permissions: T) -> &mut Self {
689 self.inner.permissions = permissions.as_ref().clone();
690 self
691 }
692}
693
694impl AsRef<ChatMemberStatusRestricted> for ChatMemberStatusRestricted {
695 fn as_ref(&self) -> &ChatMemberStatusRestricted {
696 self
697 }
698}
699
700impl AsRef<ChatMemberStatusRestricted> for ChatMemberStatusRestrictedBuilder {
701 fn as_ref(&self) -> &ChatMemberStatusRestricted {
702 &self.inner
703 }
704}