rust_tdlib/types/
message_content.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Contains the content of a message
8pub trait TDMessageContent: Debug + RObject {}
9
10/// Contains the content of a message
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum MessageContent {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// A message with an animated emoji
18    #[serde(rename = "messageAnimatedEmoji")]
19    MessageAnimatedEmoji(MessageAnimatedEmoji),
20    /// An animation message (GIF-style).
21    #[serde(rename = "messageAnimation")]
22    MessageAnimation(MessageAnimation),
23    /// An audio message
24    #[serde(rename = "messageAudio")]
25    MessageAudio(MessageAudio),
26    /// A newly created basic group
27    #[serde(rename = "messageBasicGroupChatCreate")]
28    MessageBasicGroupChatCreate(MessageBasicGroupChatCreate),
29    /// A message with information about an ended call
30    #[serde(rename = "messageCall")]
31    MessageCall(MessageCall),
32    /// New chat members were added
33    #[serde(rename = "messageChatAddMembers")]
34    MessageChatAddMembers(MessageChatAddMembers),
35    /// An updated chat photo
36    #[serde(rename = "messageChatChangePhoto")]
37    MessageChatChangePhoto(MessageChatChangePhoto),
38    /// An updated chat title
39    #[serde(rename = "messageChatChangeTitle")]
40    MessageChatChangeTitle(MessageChatChangeTitle),
41    /// A chat member was deleted
42    #[serde(rename = "messageChatDeleteMember")]
43    MessageChatDeleteMember(MessageChatDeleteMember),
44    /// A deleted chat photo
45    #[serde(rename = "messageChatDeletePhoto")]
46    MessageChatDeletePhoto(MessageChatDeletePhoto),
47    /// A new member joined the chat via an invite link
48    #[serde(rename = "messageChatJoinByLink")]
49    MessageChatJoinByLink(MessageChatJoinByLink),
50    /// A new member was accepted to the chat by an administrator
51    #[serde(rename = "messageChatJoinByRequest")]
52    MessageChatJoinByRequest(MessageChatJoinByRequest),
53    /// A theme in the chat has been changed
54    #[serde(rename = "messageChatSetTheme")]
55    MessageChatSetTheme(MessageChatSetTheme),
56    /// The TTL (Time To Live) setting for messages in the chat has been changed
57    #[serde(rename = "messageChatSetTtl")]
58    MessageChatSetTtl(MessageChatSetTtl),
59    /// A supergroup has been created from a basic group
60    #[serde(rename = "messageChatUpgradeFrom")]
61    MessageChatUpgradeFrom(MessageChatUpgradeFrom),
62    /// A basic group was upgraded to a supergroup and was deactivated as the result
63    #[serde(rename = "messageChatUpgradeTo")]
64    MessageChatUpgradeTo(MessageChatUpgradeTo),
65    /// A message with a user contact
66    #[serde(rename = "messageContact")]
67    MessageContact(MessageContact),
68    /// A contact has registered with Telegram
69    #[serde(rename = "messageContactRegistered")]
70    MessageContactRegistered(MessageContactRegistered),
71    /// A non-standard action has happened in the chat
72    #[serde(rename = "messageCustomServiceAction")]
73    MessageCustomServiceAction(MessageCustomServiceAction),
74    /// A dice message. The dice value is randomly generated by the server
75    #[serde(rename = "messageDice")]
76    MessageDice(Box<MessageDice>),
77    /// A document message (general file)
78    #[serde(rename = "messageDocument")]
79    MessageDocument(MessageDocument),
80    /// An expired photo message (self-destructed after TTL has elapsed)
81    #[serde(rename = "messageExpiredPhoto")]
82    MessageExpiredPhoto(MessageExpiredPhoto),
83    /// An expired video message (self-destructed after TTL has elapsed)
84    #[serde(rename = "messageExpiredVideo")]
85    MessageExpiredVideo(MessageExpiredVideo),
86    /// A message with a game
87    #[serde(rename = "messageGame")]
88    MessageGame(MessageGame),
89    /// A new high score was achieved in a game
90    #[serde(rename = "messageGameScore")]
91    MessageGameScore(MessageGameScore),
92    /// A message with information about an invite to a video chat
93    #[serde(rename = "messageInviteVideoChatParticipants")]
94    MessageInviteVideoChatParticipants(MessageInviteVideoChatParticipants),
95    /// A message with an invoice from a bot
96    #[serde(rename = "messageInvoice")]
97    MessageInvoice(MessageInvoice),
98    /// A message with a location
99    #[serde(rename = "messageLocation")]
100    MessageLocation(MessageLocation),
101    /// Telegram Passport data has been received; for bots only
102    #[serde(rename = "messagePassportDataReceived")]
103    MessagePassportDataReceived(MessagePassportDataReceived),
104    /// Telegram Passport data has been sent
105    #[serde(rename = "messagePassportDataSent")]
106    MessagePassportDataSent(MessagePassportDataSent),
107    /// A payment has been completed
108    #[serde(rename = "messagePaymentSuccessful")]
109    MessagePaymentSuccessful(MessagePaymentSuccessful),
110    /// A payment has been completed; for bots only
111    #[serde(rename = "messagePaymentSuccessfulBot")]
112    MessagePaymentSuccessfulBot(MessagePaymentSuccessfulBot),
113    /// A photo message
114    #[serde(rename = "messagePhoto")]
115    MessagePhoto(MessagePhoto),
116    /// A message has been pinned
117    #[serde(rename = "messagePinMessage")]
118    MessagePinMessage(MessagePinMessage),
119    /// A message with a poll
120    #[serde(rename = "messagePoll")]
121    MessagePoll(MessagePoll),
122    /// A user in the chat came within proximity alert range
123    #[serde(rename = "messageProximityAlertTriggered")]
124    MessageProximityAlertTriggered(MessageProximityAlertTriggered),
125    /// A screenshot of a message in the chat has been taken
126    #[serde(rename = "messageScreenshotTaken")]
127    MessageScreenshotTaken(MessageScreenshotTaken),
128    /// A sticker message
129    #[serde(rename = "messageSticker")]
130    MessageSticker(MessageSticker),
131    /// A newly created supergroup or channel
132    #[serde(rename = "messageSupergroupChatCreate")]
133    MessageSupergroupChatCreate(MessageSupergroupChatCreate),
134    /// A text message
135    #[serde(rename = "messageText")]
136    MessageText(Box<MessageText>),
137    /// Message content that is not supported in the current TDLib version
138    #[serde(rename = "messageUnsupported")]
139    MessageUnsupported(MessageUnsupported),
140    /// A message with information about a venue
141    #[serde(rename = "messageVenue")]
142    MessageVenue(MessageVenue),
143    /// A video message
144    #[serde(rename = "messageVideo")]
145    MessageVideo(MessageVideo),
146    /// A message with information about an ended video chat
147    #[serde(rename = "messageVideoChatEnded")]
148    MessageVideoChatEnded(MessageVideoChatEnded),
149    /// A new video chat was scheduled
150    #[serde(rename = "messageVideoChatScheduled")]
151    MessageVideoChatScheduled(MessageVideoChatScheduled),
152    /// A newly created video chat
153    #[serde(rename = "messageVideoChatStarted")]
154    MessageVideoChatStarted(MessageVideoChatStarted),
155    /// A video note message
156    #[serde(rename = "messageVideoNote")]
157    MessageVideoNote(MessageVideoNote),
158    /// A voice note message
159    #[serde(rename = "messageVoiceNote")]
160    MessageVoiceNote(MessageVoiceNote),
161    /// The current user has connected a website by logging in using Telegram Login Widget on it
162    #[serde(rename = "messageWebsiteConnected")]
163    MessageWebsiteConnected(MessageWebsiteConnected),
164}
165
166impl RObject for MessageContent {
167    #[doc(hidden)]
168    fn extra(&self) -> Option<&str> {
169        match self {
170            MessageContent::MessageAnimatedEmoji(t) => t.extra(),
171            MessageContent::MessageAnimation(t) => t.extra(),
172            MessageContent::MessageAudio(t) => t.extra(),
173            MessageContent::MessageBasicGroupChatCreate(t) => t.extra(),
174            MessageContent::MessageCall(t) => t.extra(),
175            MessageContent::MessageChatAddMembers(t) => t.extra(),
176            MessageContent::MessageChatChangePhoto(t) => t.extra(),
177            MessageContent::MessageChatChangeTitle(t) => t.extra(),
178            MessageContent::MessageChatDeleteMember(t) => t.extra(),
179            MessageContent::MessageChatDeletePhoto(t) => t.extra(),
180            MessageContent::MessageChatJoinByLink(t) => t.extra(),
181            MessageContent::MessageChatJoinByRequest(t) => t.extra(),
182            MessageContent::MessageChatSetTheme(t) => t.extra(),
183            MessageContent::MessageChatSetTtl(t) => t.extra(),
184            MessageContent::MessageChatUpgradeFrom(t) => t.extra(),
185            MessageContent::MessageChatUpgradeTo(t) => t.extra(),
186            MessageContent::MessageContact(t) => t.extra(),
187            MessageContent::MessageContactRegistered(t) => t.extra(),
188            MessageContent::MessageCustomServiceAction(t) => t.extra(),
189            MessageContent::MessageDice(t) => t.extra(),
190            MessageContent::MessageDocument(t) => t.extra(),
191            MessageContent::MessageExpiredPhoto(t) => t.extra(),
192            MessageContent::MessageExpiredVideo(t) => t.extra(),
193            MessageContent::MessageGame(t) => t.extra(),
194            MessageContent::MessageGameScore(t) => t.extra(),
195            MessageContent::MessageInviteVideoChatParticipants(t) => t.extra(),
196            MessageContent::MessageInvoice(t) => t.extra(),
197            MessageContent::MessageLocation(t) => t.extra(),
198            MessageContent::MessagePassportDataReceived(t) => t.extra(),
199            MessageContent::MessagePassportDataSent(t) => t.extra(),
200            MessageContent::MessagePaymentSuccessful(t) => t.extra(),
201            MessageContent::MessagePaymentSuccessfulBot(t) => t.extra(),
202            MessageContent::MessagePhoto(t) => t.extra(),
203            MessageContent::MessagePinMessage(t) => t.extra(),
204            MessageContent::MessagePoll(t) => t.extra(),
205            MessageContent::MessageProximityAlertTriggered(t) => t.extra(),
206            MessageContent::MessageScreenshotTaken(t) => t.extra(),
207            MessageContent::MessageSticker(t) => t.extra(),
208            MessageContent::MessageSupergroupChatCreate(t) => t.extra(),
209            MessageContent::MessageText(t) => t.extra(),
210            MessageContent::MessageUnsupported(t) => t.extra(),
211            MessageContent::MessageVenue(t) => t.extra(),
212            MessageContent::MessageVideo(t) => t.extra(),
213            MessageContent::MessageVideoChatEnded(t) => t.extra(),
214            MessageContent::MessageVideoChatScheduled(t) => t.extra(),
215            MessageContent::MessageVideoChatStarted(t) => t.extra(),
216            MessageContent::MessageVideoNote(t) => t.extra(),
217            MessageContent::MessageVoiceNote(t) => t.extra(),
218            MessageContent::MessageWebsiteConnected(t) => t.extra(),
219
220            _ => None,
221        }
222    }
223    #[doc(hidden)]
224    fn client_id(&self) -> Option<i32> {
225        match self {
226            MessageContent::MessageAnimatedEmoji(t) => t.client_id(),
227            MessageContent::MessageAnimation(t) => t.client_id(),
228            MessageContent::MessageAudio(t) => t.client_id(),
229            MessageContent::MessageBasicGroupChatCreate(t) => t.client_id(),
230            MessageContent::MessageCall(t) => t.client_id(),
231            MessageContent::MessageChatAddMembers(t) => t.client_id(),
232            MessageContent::MessageChatChangePhoto(t) => t.client_id(),
233            MessageContent::MessageChatChangeTitle(t) => t.client_id(),
234            MessageContent::MessageChatDeleteMember(t) => t.client_id(),
235            MessageContent::MessageChatDeletePhoto(t) => t.client_id(),
236            MessageContent::MessageChatJoinByLink(t) => t.client_id(),
237            MessageContent::MessageChatJoinByRequest(t) => t.client_id(),
238            MessageContent::MessageChatSetTheme(t) => t.client_id(),
239            MessageContent::MessageChatSetTtl(t) => t.client_id(),
240            MessageContent::MessageChatUpgradeFrom(t) => t.client_id(),
241            MessageContent::MessageChatUpgradeTo(t) => t.client_id(),
242            MessageContent::MessageContact(t) => t.client_id(),
243            MessageContent::MessageContactRegistered(t) => t.client_id(),
244            MessageContent::MessageCustomServiceAction(t) => t.client_id(),
245            MessageContent::MessageDice(t) => t.client_id(),
246            MessageContent::MessageDocument(t) => t.client_id(),
247            MessageContent::MessageExpiredPhoto(t) => t.client_id(),
248            MessageContent::MessageExpiredVideo(t) => t.client_id(),
249            MessageContent::MessageGame(t) => t.client_id(),
250            MessageContent::MessageGameScore(t) => t.client_id(),
251            MessageContent::MessageInviteVideoChatParticipants(t) => t.client_id(),
252            MessageContent::MessageInvoice(t) => t.client_id(),
253            MessageContent::MessageLocation(t) => t.client_id(),
254            MessageContent::MessagePassportDataReceived(t) => t.client_id(),
255            MessageContent::MessagePassportDataSent(t) => t.client_id(),
256            MessageContent::MessagePaymentSuccessful(t) => t.client_id(),
257            MessageContent::MessagePaymentSuccessfulBot(t) => t.client_id(),
258            MessageContent::MessagePhoto(t) => t.client_id(),
259            MessageContent::MessagePinMessage(t) => t.client_id(),
260            MessageContent::MessagePoll(t) => t.client_id(),
261            MessageContent::MessageProximityAlertTriggered(t) => t.client_id(),
262            MessageContent::MessageScreenshotTaken(t) => t.client_id(),
263            MessageContent::MessageSticker(t) => t.client_id(),
264            MessageContent::MessageSupergroupChatCreate(t) => t.client_id(),
265            MessageContent::MessageText(t) => t.client_id(),
266            MessageContent::MessageUnsupported(t) => t.client_id(),
267            MessageContent::MessageVenue(t) => t.client_id(),
268            MessageContent::MessageVideo(t) => t.client_id(),
269            MessageContent::MessageVideoChatEnded(t) => t.client_id(),
270            MessageContent::MessageVideoChatScheduled(t) => t.client_id(),
271            MessageContent::MessageVideoChatStarted(t) => t.client_id(),
272            MessageContent::MessageVideoNote(t) => t.client_id(),
273            MessageContent::MessageVoiceNote(t) => t.client_id(),
274            MessageContent::MessageWebsiteConnected(t) => t.client_id(),
275
276            _ => None,
277        }
278    }
279}
280
281impl MessageContent {
282    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
283        Ok(serde_json::from_str(json.as_ref())?)
284    }
285    #[doc(hidden)]
286    pub fn _is_default(&self) -> bool {
287        matches!(self, MessageContent::_Default)
288    }
289}
290
291impl AsRef<MessageContent> for MessageContent {
292    fn as_ref(&self) -> &MessageContent {
293        self
294    }
295}
296
297/// A message with an animated emoji
298#[derive(Debug, Clone, Default, Serialize, Deserialize)]
299pub struct MessageAnimatedEmoji {
300    #[doc(hidden)]
301    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
302    extra: Option<String>,
303    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
304    client_id: Option<i32>,
305    /// The animated emoji
306    animated_emoji: AnimatedEmoji,
307    /// The corresponding emoji
308
309    #[serde(default)]
310    emoji: String,
311}
312
313impl RObject for MessageAnimatedEmoji {
314    #[doc(hidden)]
315    fn extra(&self) -> Option<&str> {
316        self.extra.as_deref()
317    }
318    #[doc(hidden)]
319    fn client_id(&self) -> Option<i32> {
320        self.client_id
321    }
322}
323
324impl TDMessageContent for MessageAnimatedEmoji {}
325
326impl MessageAnimatedEmoji {
327    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
328        Ok(serde_json::from_str(json.as_ref())?)
329    }
330    pub fn builder() -> MessageAnimatedEmojiBuilder {
331        let mut inner = MessageAnimatedEmoji::default();
332        inner.extra = Some(Uuid::new_v4().to_string());
333
334        MessageAnimatedEmojiBuilder { inner }
335    }
336
337    pub fn animated_emoji(&self) -> &AnimatedEmoji {
338        &self.animated_emoji
339    }
340
341    pub fn emoji(&self) -> &String {
342        &self.emoji
343    }
344}
345
346#[doc(hidden)]
347pub struct MessageAnimatedEmojiBuilder {
348    inner: MessageAnimatedEmoji,
349}
350
351#[deprecated]
352pub type RTDMessageAnimatedEmojiBuilder = MessageAnimatedEmojiBuilder;
353
354impl MessageAnimatedEmojiBuilder {
355    pub fn build(&self) -> MessageAnimatedEmoji {
356        self.inner.clone()
357    }
358
359    pub fn animated_emoji<T: AsRef<AnimatedEmoji>>(&mut self, animated_emoji: T) -> &mut Self {
360        self.inner.animated_emoji = animated_emoji.as_ref().clone();
361        self
362    }
363
364    pub fn emoji<T: AsRef<str>>(&mut self, emoji: T) -> &mut Self {
365        self.inner.emoji = emoji.as_ref().to_string();
366        self
367    }
368}
369
370impl AsRef<MessageAnimatedEmoji> for MessageAnimatedEmoji {
371    fn as_ref(&self) -> &MessageAnimatedEmoji {
372        self
373    }
374}
375
376impl AsRef<MessageAnimatedEmoji> for MessageAnimatedEmojiBuilder {
377    fn as_ref(&self) -> &MessageAnimatedEmoji {
378        &self.inner
379    }
380}
381
382/// An animation message (GIF-style).
383#[derive(Debug, Clone, Default, Serialize, Deserialize)]
384pub struct MessageAnimation {
385    #[doc(hidden)]
386    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
387    extra: Option<String>,
388    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
389    client_id: Option<i32>,
390    /// The animation description
391    animation: Animation,
392    /// Animation caption
393    caption: FormattedText,
394    /// True, if the animation thumbnail must be blurred and the animation must be shown only while tapped
395
396    #[serde(default)]
397    is_secret: bool,
398}
399
400impl RObject for MessageAnimation {
401    #[doc(hidden)]
402    fn extra(&self) -> Option<&str> {
403        self.extra.as_deref()
404    }
405    #[doc(hidden)]
406    fn client_id(&self) -> Option<i32> {
407        self.client_id
408    }
409}
410
411impl TDMessageContent for MessageAnimation {}
412
413impl MessageAnimation {
414    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
415        Ok(serde_json::from_str(json.as_ref())?)
416    }
417    pub fn builder() -> MessageAnimationBuilder {
418        let mut inner = MessageAnimation::default();
419        inner.extra = Some(Uuid::new_v4().to_string());
420
421        MessageAnimationBuilder { inner }
422    }
423
424    pub fn animation(&self) -> &Animation {
425        &self.animation
426    }
427
428    pub fn caption(&self) -> &FormattedText {
429        &self.caption
430    }
431
432    pub fn is_secret(&self) -> bool {
433        self.is_secret
434    }
435}
436
437#[doc(hidden)]
438pub struct MessageAnimationBuilder {
439    inner: MessageAnimation,
440}
441
442#[deprecated]
443pub type RTDMessageAnimationBuilder = MessageAnimationBuilder;
444
445impl MessageAnimationBuilder {
446    pub fn build(&self) -> MessageAnimation {
447        self.inner.clone()
448    }
449
450    pub fn animation<T: AsRef<Animation>>(&mut self, animation: T) -> &mut Self {
451        self.inner.animation = animation.as_ref().clone();
452        self
453    }
454
455    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
456        self.inner.caption = caption.as_ref().clone();
457        self
458    }
459
460    pub fn is_secret(&mut self, is_secret: bool) -> &mut Self {
461        self.inner.is_secret = is_secret;
462        self
463    }
464}
465
466impl AsRef<MessageAnimation> for MessageAnimation {
467    fn as_ref(&self) -> &MessageAnimation {
468        self
469    }
470}
471
472impl AsRef<MessageAnimation> for MessageAnimationBuilder {
473    fn as_ref(&self) -> &MessageAnimation {
474        &self.inner
475    }
476}
477
478/// An audio message
479#[derive(Debug, Clone, Default, Serialize, Deserialize)]
480pub struct MessageAudio {
481    #[doc(hidden)]
482    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
483    extra: Option<String>,
484    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
485    client_id: Option<i32>,
486    /// The audio description
487    audio: Audio,
488    /// Audio caption
489    caption: FormattedText,
490}
491
492impl RObject for MessageAudio {
493    #[doc(hidden)]
494    fn extra(&self) -> Option<&str> {
495        self.extra.as_deref()
496    }
497    #[doc(hidden)]
498    fn client_id(&self) -> Option<i32> {
499        self.client_id
500    }
501}
502
503impl TDMessageContent for MessageAudio {}
504
505impl MessageAudio {
506    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
507        Ok(serde_json::from_str(json.as_ref())?)
508    }
509    pub fn builder() -> MessageAudioBuilder {
510        let mut inner = MessageAudio::default();
511        inner.extra = Some(Uuid::new_v4().to_string());
512
513        MessageAudioBuilder { inner }
514    }
515
516    pub fn audio(&self) -> &Audio {
517        &self.audio
518    }
519
520    pub fn caption(&self) -> &FormattedText {
521        &self.caption
522    }
523}
524
525#[doc(hidden)]
526pub struct MessageAudioBuilder {
527    inner: MessageAudio,
528}
529
530#[deprecated]
531pub type RTDMessageAudioBuilder = MessageAudioBuilder;
532
533impl MessageAudioBuilder {
534    pub fn build(&self) -> MessageAudio {
535        self.inner.clone()
536    }
537
538    pub fn audio<T: AsRef<Audio>>(&mut self, audio: T) -> &mut Self {
539        self.inner.audio = audio.as_ref().clone();
540        self
541    }
542
543    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
544        self.inner.caption = caption.as_ref().clone();
545        self
546    }
547}
548
549impl AsRef<MessageAudio> for MessageAudio {
550    fn as_ref(&self) -> &MessageAudio {
551        self
552    }
553}
554
555impl AsRef<MessageAudio> for MessageAudioBuilder {
556    fn as_ref(&self) -> &MessageAudio {
557        &self.inner
558    }
559}
560
561/// A newly created basic group
562#[derive(Debug, Clone, Default, Serialize, Deserialize)]
563pub struct MessageBasicGroupChatCreate {
564    #[doc(hidden)]
565    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
566    extra: Option<String>,
567    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
568    client_id: Option<i32>,
569    /// Title of the basic group
570
571    #[serde(default)]
572    title: String,
573    /// User identifiers of members in the basic group
574
575    #[serde(default)]
576    member_user_ids: Vec<i64>,
577}
578
579impl RObject for MessageBasicGroupChatCreate {
580    #[doc(hidden)]
581    fn extra(&self) -> Option<&str> {
582        self.extra.as_deref()
583    }
584    #[doc(hidden)]
585    fn client_id(&self) -> Option<i32> {
586        self.client_id
587    }
588}
589
590impl TDMessageContent for MessageBasicGroupChatCreate {}
591
592impl MessageBasicGroupChatCreate {
593    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
594        Ok(serde_json::from_str(json.as_ref())?)
595    }
596    pub fn builder() -> MessageBasicGroupChatCreateBuilder {
597        let mut inner = MessageBasicGroupChatCreate::default();
598        inner.extra = Some(Uuid::new_v4().to_string());
599
600        MessageBasicGroupChatCreateBuilder { inner }
601    }
602
603    pub fn title(&self) -> &String {
604        &self.title
605    }
606
607    pub fn member_user_ids(&self) -> &Vec<i64> {
608        &self.member_user_ids
609    }
610}
611
612#[doc(hidden)]
613pub struct MessageBasicGroupChatCreateBuilder {
614    inner: MessageBasicGroupChatCreate,
615}
616
617#[deprecated]
618pub type RTDMessageBasicGroupChatCreateBuilder = MessageBasicGroupChatCreateBuilder;
619
620impl MessageBasicGroupChatCreateBuilder {
621    pub fn build(&self) -> MessageBasicGroupChatCreate {
622        self.inner.clone()
623    }
624
625    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
626        self.inner.title = title.as_ref().to_string();
627        self
628    }
629
630    pub fn member_user_ids(&mut self, member_user_ids: Vec<i64>) -> &mut Self {
631        self.inner.member_user_ids = member_user_ids;
632        self
633    }
634}
635
636impl AsRef<MessageBasicGroupChatCreate> for MessageBasicGroupChatCreate {
637    fn as_ref(&self) -> &MessageBasicGroupChatCreate {
638        self
639    }
640}
641
642impl AsRef<MessageBasicGroupChatCreate> for MessageBasicGroupChatCreateBuilder {
643    fn as_ref(&self) -> &MessageBasicGroupChatCreate {
644        &self.inner
645    }
646}
647
648/// A message with information about an ended call
649#[derive(Debug, Clone, Default, Serialize, Deserialize)]
650pub struct MessageCall {
651    #[doc(hidden)]
652    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
653    extra: Option<String>,
654    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
655    client_id: Option<i32>,
656    /// True, if the call was a video call
657
658    #[serde(default)]
659    is_video: bool,
660    /// Reason why the call was discarded
661
662    #[serde(skip_serializing_if = "CallDiscardReason::_is_default")]
663    discard_reason: CallDiscardReason,
664    /// Call duration, in seconds
665
666    #[serde(default)]
667    duration: i32,
668}
669
670impl RObject for MessageCall {
671    #[doc(hidden)]
672    fn extra(&self) -> Option<&str> {
673        self.extra.as_deref()
674    }
675    #[doc(hidden)]
676    fn client_id(&self) -> Option<i32> {
677        self.client_id
678    }
679}
680
681impl TDMessageContent for MessageCall {}
682
683impl MessageCall {
684    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
685        Ok(serde_json::from_str(json.as_ref())?)
686    }
687    pub fn builder() -> MessageCallBuilder {
688        let mut inner = MessageCall::default();
689        inner.extra = Some(Uuid::new_v4().to_string());
690
691        MessageCallBuilder { inner }
692    }
693
694    pub fn is_video(&self) -> bool {
695        self.is_video
696    }
697
698    pub fn discard_reason(&self) -> &CallDiscardReason {
699        &self.discard_reason
700    }
701
702    pub fn duration(&self) -> i32 {
703        self.duration
704    }
705}
706
707#[doc(hidden)]
708pub struct MessageCallBuilder {
709    inner: MessageCall,
710}
711
712#[deprecated]
713pub type RTDMessageCallBuilder = MessageCallBuilder;
714
715impl MessageCallBuilder {
716    pub fn build(&self) -> MessageCall {
717        self.inner.clone()
718    }
719
720    pub fn is_video(&mut self, is_video: bool) -> &mut Self {
721        self.inner.is_video = is_video;
722        self
723    }
724
725    pub fn discard_reason<T: AsRef<CallDiscardReason>>(&mut self, discard_reason: T) -> &mut Self {
726        self.inner.discard_reason = discard_reason.as_ref().clone();
727        self
728    }
729
730    pub fn duration(&mut self, duration: i32) -> &mut Self {
731        self.inner.duration = duration;
732        self
733    }
734}
735
736impl AsRef<MessageCall> for MessageCall {
737    fn as_ref(&self) -> &MessageCall {
738        self
739    }
740}
741
742impl AsRef<MessageCall> for MessageCallBuilder {
743    fn as_ref(&self) -> &MessageCall {
744        &self.inner
745    }
746}
747
748/// New chat members were added
749#[derive(Debug, Clone, Default, Serialize, Deserialize)]
750pub struct MessageChatAddMembers {
751    #[doc(hidden)]
752    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
753    extra: Option<String>,
754    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
755    client_id: Option<i32>,
756    /// User identifiers of the new members
757
758    #[serde(default)]
759    member_user_ids: Vec<i64>,
760}
761
762impl RObject for MessageChatAddMembers {
763    #[doc(hidden)]
764    fn extra(&self) -> Option<&str> {
765        self.extra.as_deref()
766    }
767    #[doc(hidden)]
768    fn client_id(&self) -> Option<i32> {
769        self.client_id
770    }
771}
772
773impl TDMessageContent for MessageChatAddMembers {}
774
775impl MessageChatAddMembers {
776    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
777        Ok(serde_json::from_str(json.as_ref())?)
778    }
779    pub fn builder() -> MessageChatAddMembersBuilder {
780        let mut inner = MessageChatAddMembers::default();
781        inner.extra = Some(Uuid::new_v4().to_string());
782
783        MessageChatAddMembersBuilder { inner }
784    }
785
786    pub fn member_user_ids(&self) -> &Vec<i64> {
787        &self.member_user_ids
788    }
789}
790
791#[doc(hidden)]
792pub struct MessageChatAddMembersBuilder {
793    inner: MessageChatAddMembers,
794}
795
796#[deprecated]
797pub type RTDMessageChatAddMembersBuilder = MessageChatAddMembersBuilder;
798
799impl MessageChatAddMembersBuilder {
800    pub fn build(&self) -> MessageChatAddMembers {
801        self.inner.clone()
802    }
803
804    pub fn member_user_ids(&mut self, member_user_ids: Vec<i64>) -> &mut Self {
805        self.inner.member_user_ids = member_user_ids;
806        self
807    }
808}
809
810impl AsRef<MessageChatAddMembers> for MessageChatAddMembers {
811    fn as_ref(&self) -> &MessageChatAddMembers {
812        self
813    }
814}
815
816impl AsRef<MessageChatAddMembers> for MessageChatAddMembersBuilder {
817    fn as_ref(&self) -> &MessageChatAddMembers {
818        &self.inner
819    }
820}
821
822/// An updated chat photo
823#[derive(Debug, Clone, Default, Serialize, Deserialize)]
824pub struct MessageChatChangePhoto {
825    #[doc(hidden)]
826    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
827    extra: Option<String>,
828    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
829    client_id: Option<i32>,
830    /// New chat photo
831    photo: ChatPhoto,
832}
833
834impl RObject for MessageChatChangePhoto {
835    #[doc(hidden)]
836    fn extra(&self) -> Option<&str> {
837        self.extra.as_deref()
838    }
839    #[doc(hidden)]
840    fn client_id(&self) -> Option<i32> {
841        self.client_id
842    }
843}
844
845impl TDMessageContent for MessageChatChangePhoto {}
846
847impl MessageChatChangePhoto {
848    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
849        Ok(serde_json::from_str(json.as_ref())?)
850    }
851    pub fn builder() -> MessageChatChangePhotoBuilder {
852        let mut inner = MessageChatChangePhoto::default();
853        inner.extra = Some(Uuid::new_v4().to_string());
854
855        MessageChatChangePhotoBuilder { inner }
856    }
857
858    pub fn photo(&self) -> &ChatPhoto {
859        &self.photo
860    }
861}
862
863#[doc(hidden)]
864pub struct MessageChatChangePhotoBuilder {
865    inner: MessageChatChangePhoto,
866}
867
868#[deprecated]
869pub type RTDMessageChatChangePhotoBuilder = MessageChatChangePhotoBuilder;
870
871impl MessageChatChangePhotoBuilder {
872    pub fn build(&self) -> MessageChatChangePhoto {
873        self.inner.clone()
874    }
875
876    pub fn photo<T: AsRef<ChatPhoto>>(&mut self, photo: T) -> &mut Self {
877        self.inner.photo = photo.as_ref().clone();
878        self
879    }
880}
881
882impl AsRef<MessageChatChangePhoto> for MessageChatChangePhoto {
883    fn as_ref(&self) -> &MessageChatChangePhoto {
884        self
885    }
886}
887
888impl AsRef<MessageChatChangePhoto> for MessageChatChangePhotoBuilder {
889    fn as_ref(&self) -> &MessageChatChangePhoto {
890        &self.inner
891    }
892}
893
894/// An updated chat title
895#[derive(Debug, Clone, Default, Serialize, Deserialize)]
896pub struct MessageChatChangeTitle {
897    #[doc(hidden)]
898    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
899    extra: Option<String>,
900    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
901    client_id: Option<i32>,
902    /// New chat title
903
904    #[serde(default)]
905    title: String,
906}
907
908impl RObject for MessageChatChangeTitle {
909    #[doc(hidden)]
910    fn extra(&self) -> Option<&str> {
911        self.extra.as_deref()
912    }
913    #[doc(hidden)]
914    fn client_id(&self) -> Option<i32> {
915        self.client_id
916    }
917}
918
919impl TDMessageContent for MessageChatChangeTitle {}
920
921impl MessageChatChangeTitle {
922    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
923        Ok(serde_json::from_str(json.as_ref())?)
924    }
925    pub fn builder() -> MessageChatChangeTitleBuilder {
926        let mut inner = MessageChatChangeTitle::default();
927        inner.extra = Some(Uuid::new_v4().to_string());
928
929        MessageChatChangeTitleBuilder { inner }
930    }
931
932    pub fn title(&self) -> &String {
933        &self.title
934    }
935}
936
937#[doc(hidden)]
938pub struct MessageChatChangeTitleBuilder {
939    inner: MessageChatChangeTitle,
940}
941
942#[deprecated]
943pub type RTDMessageChatChangeTitleBuilder = MessageChatChangeTitleBuilder;
944
945impl MessageChatChangeTitleBuilder {
946    pub fn build(&self) -> MessageChatChangeTitle {
947        self.inner.clone()
948    }
949
950    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
951        self.inner.title = title.as_ref().to_string();
952        self
953    }
954}
955
956impl AsRef<MessageChatChangeTitle> for MessageChatChangeTitle {
957    fn as_ref(&self) -> &MessageChatChangeTitle {
958        self
959    }
960}
961
962impl AsRef<MessageChatChangeTitle> for MessageChatChangeTitleBuilder {
963    fn as_ref(&self) -> &MessageChatChangeTitle {
964        &self.inner
965    }
966}
967
968/// A chat member was deleted
969#[derive(Debug, Clone, Default, Serialize, Deserialize)]
970pub struct MessageChatDeleteMember {
971    #[doc(hidden)]
972    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
973    extra: Option<String>,
974    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
975    client_id: Option<i32>,
976    /// User identifier of the deleted chat member
977
978    #[serde(default)]
979    user_id: i64,
980}
981
982impl RObject for MessageChatDeleteMember {
983    #[doc(hidden)]
984    fn extra(&self) -> Option<&str> {
985        self.extra.as_deref()
986    }
987    #[doc(hidden)]
988    fn client_id(&self) -> Option<i32> {
989        self.client_id
990    }
991}
992
993impl TDMessageContent for MessageChatDeleteMember {}
994
995impl MessageChatDeleteMember {
996    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
997        Ok(serde_json::from_str(json.as_ref())?)
998    }
999    pub fn builder() -> MessageChatDeleteMemberBuilder {
1000        let mut inner = MessageChatDeleteMember::default();
1001        inner.extra = Some(Uuid::new_v4().to_string());
1002
1003        MessageChatDeleteMemberBuilder { inner }
1004    }
1005
1006    pub fn user_id(&self) -> i64 {
1007        self.user_id
1008    }
1009}
1010
1011#[doc(hidden)]
1012pub struct MessageChatDeleteMemberBuilder {
1013    inner: MessageChatDeleteMember,
1014}
1015
1016#[deprecated]
1017pub type RTDMessageChatDeleteMemberBuilder = MessageChatDeleteMemberBuilder;
1018
1019impl MessageChatDeleteMemberBuilder {
1020    pub fn build(&self) -> MessageChatDeleteMember {
1021        self.inner.clone()
1022    }
1023
1024    pub fn user_id(&mut self, user_id: i64) -> &mut Self {
1025        self.inner.user_id = user_id;
1026        self
1027    }
1028}
1029
1030impl AsRef<MessageChatDeleteMember> for MessageChatDeleteMember {
1031    fn as_ref(&self) -> &MessageChatDeleteMember {
1032        self
1033    }
1034}
1035
1036impl AsRef<MessageChatDeleteMember> for MessageChatDeleteMemberBuilder {
1037    fn as_ref(&self) -> &MessageChatDeleteMember {
1038        &self.inner
1039    }
1040}
1041
1042/// A deleted chat photo
1043#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1044pub struct MessageChatDeletePhoto {
1045    #[doc(hidden)]
1046    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1047    extra: Option<String>,
1048    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1049    client_id: Option<i32>,
1050}
1051
1052impl RObject for MessageChatDeletePhoto {
1053    #[doc(hidden)]
1054    fn extra(&self) -> Option<&str> {
1055        self.extra.as_deref()
1056    }
1057    #[doc(hidden)]
1058    fn client_id(&self) -> Option<i32> {
1059        self.client_id
1060    }
1061}
1062
1063impl TDMessageContent for MessageChatDeletePhoto {}
1064
1065impl MessageChatDeletePhoto {
1066    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1067        Ok(serde_json::from_str(json.as_ref())?)
1068    }
1069    pub fn builder() -> MessageChatDeletePhotoBuilder {
1070        let mut inner = MessageChatDeletePhoto::default();
1071        inner.extra = Some(Uuid::new_v4().to_string());
1072
1073        MessageChatDeletePhotoBuilder { inner }
1074    }
1075}
1076
1077#[doc(hidden)]
1078pub struct MessageChatDeletePhotoBuilder {
1079    inner: MessageChatDeletePhoto,
1080}
1081
1082#[deprecated]
1083pub type RTDMessageChatDeletePhotoBuilder = MessageChatDeletePhotoBuilder;
1084
1085impl MessageChatDeletePhotoBuilder {
1086    pub fn build(&self) -> MessageChatDeletePhoto {
1087        self.inner.clone()
1088    }
1089}
1090
1091impl AsRef<MessageChatDeletePhoto> for MessageChatDeletePhoto {
1092    fn as_ref(&self) -> &MessageChatDeletePhoto {
1093        self
1094    }
1095}
1096
1097impl AsRef<MessageChatDeletePhoto> for MessageChatDeletePhotoBuilder {
1098    fn as_ref(&self) -> &MessageChatDeletePhoto {
1099        &self.inner
1100    }
1101}
1102
1103/// A new member joined the chat via an invite link
1104#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1105pub struct MessageChatJoinByLink {
1106    #[doc(hidden)]
1107    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1108    extra: Option<String>,
1109    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1110    client_id: Option<i32>,
1111}
1112
1113impl RObject for MessageChatJoinByLink {
1114    #[doc(hidden)]
1115    fn extra(&self) -> Option<&str> {
1116        self.extra.as_deref()
1117    }
1118    #[doc(hidden)]
1119    fn client_id(&self) -> Option<i32> {
1120        self.client_id
1121    }
1122}
1123
1124impl TDMessageContent for MessageChatJoinByLink {}
1125
1126impl MessageChatJoinByLink {
1127    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1128        Ok(serde_json::from_str(json.as_ref())?)
1129    }
1130    pub fn builder() -> MessageChatJoinByLinkBuilder {
1131        let mut inner = MessageChatJoinByLink::default();
1132        inner.extra = Some(Uuid::new_v4().to_string());
1133
1134        MessageChatJoinByLinkBuilder { inner }
1135    }
1136}
1137
1138#[doc(hidden)]
1139pub struct MessageChatJoinByLinkBuilder {
1140    inner: MessageChatJoinByLink,
1141}
1142
1143#[deprecated]
1144pub type RTDMessageChatJoinByLinkBuilder = MessageChatJoinByLinkBuilder;
1145
1146impl MessageChatJoinByLinkBuilder {
1147    pub fn build(&self) -> MessageChatJoinByLink {
1148        self.inner.clone()
1149    }
1150}
1151
1152impl AsRef<MessageChatJoinByLink> for MessageChatJoinByLink {
1153    fn as_ref(&self) -> &MessageChatJoinByLink {
1154        self
1155    }
1156}
1157
1158impl AsRef<MessageChatJoinByLink> for MessageChatJoinByLinkBuilder {
1159    fn as_ref(&self) -> &MessageChatJoinByLink {
1160        &self.inner
1161    }
1162}
1163
1164/// A new member was accepted to the chat by an administrator
1165#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1166pub struct MessageChatJoinByRequest {
1167    #[doc(hidden)]
1168    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1169    extra: Option<String>,
1170    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1171    client_id: Option<i32>,
1172}
1173
1174impl RObject for MessageChatJoinByRequest {
1175    #[doc(hidden)]
1176    fn extra(&self) -> Option<&str> {
1177        self.extra.as_deref()
1178    }
1179    #[doc(hidden)]
1180    fn client_id(&self) -> Option<i32> {
1181        self.client_id
1182    }
1183}
1184
1185impl TDMessageContent for MessageChatJoinByRequest {}
1186
1187impl MessageChatJoinByRequest {
1188    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1189        Ok(serde_json::from_str(json.as_ref())?)
1190    }
1191    pub fn builder() -> MessageChatJoinByRequestBuilder {
1192        let mut inner = MessageChatJoinByRequest::default();
1193        inner.extra = Some(Uuid::new_v4().to_string());
1194
1195        MessageChatJoinByRequestBuilder { inner }
1196    }
1197}
1198
1199#[doc(hidden)]
1200pub struct MessageChatJoinByRequestBuilder {
1201    inner: MessageChatJoinByRequest,
1202}
1203
1204#[deprecated]
1205pub type RTDMessageChatJoinByRequestBuilder = MessageChatJoinByRequestBuilder;
1206
1207impl MessageChatJoinByRequestBuilder {
1208    pub fn build(&self) -> MessageChatJoinByRequest {
1209        self.inner.clone()
1210    }
1211}
1212
1213impl AsRef<MessageChatJoinByRequest> for MessageChatJoinByRequest {
1214    fn as_ref(&self) -> &MessageChatJoinByRequest {
1215        self
1216    }
1217}
1218
1219impl AsRef<MessageChatJoinByRequest> for MessageChatJoinByRequestBuilder {
1220    fn as_ref(&self) -> &MessageChatJoinByRequest {
1221        &self.inner
1222    }
1223}
1224
1225/// A theme in the chat has been changed
1226#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1227pub struct MessageChatSetTheme {
1228    #[doc(hidden)]
1229    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1230    extra: Option<String>,
1231    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1232    client_id: Option<i32>,
1233    /// If non-empty, name of a new theme, set for the chat. Otherwise chat theme was reset to the default one
1234
1235    #[serde(default)]
1236    theme_name: String,
1237}
1238
1239impl RObject for MessageChatSetTheme {
1240    #[doc(hidden)]
1241    fn extra(&self) -> Option<&str> {
1242        self.extra.as_deref()
1243    }
1244    #[doc(hidden)]
1245    fn client_id(&self) -> Option<i32> {
1246        self.client_id
1247    }
1248}
1249
1250impl TDMessageContent for MessageChatSetTheme {}
1251
1252impl MessageChatSetTheme {
1253    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1254        Ok(serde_json::from_str(json.as_ref())?)
1255    }
1256    pub fn builder() -> MessageChatSetThemeBuilder {
1257        let mut inner = MessageChatSetTheme::default();
1258        inner.extra = Some(Uuid::new_v4().to_string());
1259
1260        MessageChatSetThemeBuilder { inner }
1261    }
1262
1263    pub fn theme_name(&self) -> &String {
1264        &self.theme_name
1265    }
1266}
1267
1268#[doc(hidden)]
1269pub struct MessageChatSetThemeBuilder {
1270    inner: MessageChatSetTheme,
1271}
1272
1273#[deprecated]
1274pub type RTDMessageChatSetThemeBuilder = MessageChatSetThemeBuilder;
1275
1276impl MessageChatSetThemeBuilder {
1277    pub fn build(&self) -> MessageChatSetTheme {
1278        self.inner.clone()
1279    }
1280
1281    pub fn theme_name<T: AsRef<str>>(&mut self, theme_name: T) -> &mut Self {
1282        self.inner.theme_name = theme_name.as_ref().to_string();
1283        self
1284    }
1285}
1286
1287impl AsRef<MessageChatSetTheme> for MessageChatSetTheme {
1288    fn as_ref(&self) -> &MessageChatSetTheme {
1289        self
1290    }
1291}
1292
1293impl AsRef<MessageChatSetTheme> for MessageChatSetThemeBuilder {
1294    fn as_ref(&self) -> &MessageChatSetTheme {
1295        &self.inner
1296    }
1297}
1298
1299/// The TTL (Time To Live) setting for messages in the chat has been changed
1300#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1301pub struct MessageChatSetTtl {
1302    #[doc(hidden)]
1303    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1304    extra: Option<String>,
1305    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1306    client_id: Option<i32>,
1307    /// New message TTL
1308
1309    #[serde(default)]
1310    ttl: i32,
1311}
1312
1313impl RObject for MessageChatSetTtl {
1314    #[doc(hidden)]
1315    fn extra(&self) -> Option<&str> {
1316        self.extra.as_deref()
1317    }
1318    #[doc(hidden)]
1319    fn client_id(&self) -> Option<i32> {
1320        self.client_id
1321    }
1322}
1323
1324impl TDMessageContent for MessageChatSetTtl {}
1325
1326impl MessageChatSetTtl {
1327    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1328        Ok(serde_json::from_str(json.as_ref())?)
1329    }
1330    pub fn builder() -> MessageChatSetTtlBuilder {
1331        let mut inner = MessageChatSetTtl::default();
1332        inner.extra = Some(Uuid::new_v4().to_string());
1333
1334        MessageChatSetTtlBuilder { inner }
1335    }
1336
1337    pub fn ttl(&self) -> i32 {
1338        self.ttl
1339    }
1340}
1341
1342#[doc(hidden)]
1343pub struct MessageChatSetTtlBuilder {
1344    inner: MessageChatSetTtl,
1345}
1346
1347#[deprecated]
1348pub type RTDMessageChatSetTtlBuilder = MessageChatSetTtlBuilder;
1349
1350impl MessageChatSetTtlBuilder {
1351    pub fn build(&self) -> MessageChatSetTtl {
1352        self.inner.clone()
1353    }
1354
1355    pub fn ttl(&mut self, ttl: i32) -> &mut Self {
1356        self.inner.ttl = ttl;
1357        self
1358    }
1359}
1360
1361impl AsRef<MessageChatSetTtl> for MessageChatSetTtl {
1362    fn as_ref(&self) -> &MessageChatSetTtl {
1363        self
1364    }
1365}
1366
1367impl AsRef<MessageChatSetTtl> for MessageChatSetTtlBuilder {
1368    fn as_ref(&self) -> &MessageChatSetTtl {
1369        &self.inner
1370    }
1371}
1372
1373/// A supergroup has been created from a basic group
1374#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1375pub struct MessageChatUpgradeFrom {
1376    #[doc(hidden)]
1377    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1378    extra: Option<String>,
1379    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1380    client_id: Option<i32>,
1381    /// Title of the newly created supergroup
1382
1383    #[serde(default)]
1384    title: String,
1385    /// The identifier of the original basic group
1386
1387    #[serde(default)]
1388    basic_group_id: i64,
1389}
1390
1391impl RObject for MessageChatUpgradeFrom {
1392    #[doc(hidden)]
1393    fn extra(&self) -> Option<&str> {
1394        self.extra.as_deref()
1395    }
1396    #[doc(hidden)]
1397    fn client_id(&self) -> Option<i32> {
1398        self.client_id
1399    }
1400}
1401
1402impl TDMessageContent for MessageChatUpgradeFrom {}
1403
1404impl MessageChatUpgradeFrom {
1405    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1406        Ok(serde_json::from_str(json.as_ref())?)
1407    }
1408    pub fn builder() -> MessageChatUpgradeFromBuilder {
1409        let mut inner = MessageChatUpgradeFrom::default();
1410        inner.extra = Some(Uuid::new_v4().to_string());
1411
1412        MessageChatUpgradeFromBuilder { inner }
1413    }
1414
1415    pub fn title(&self) -> &String {
1416        &self.title
1417    }
1418
1419    pub fn basic_group_id(&self) -> i64 {
1420        self.basic_group_id
1421    }
1422}
1423
1424#[doc(hidden)]
1425pub struct MessageChatUpgradeFromBuilder {
1426    inner: MessageChatUpgradeFrom,
1427}
1428
1429#[deprecated]
1430pub type RTDMessageChatUpgradeFromBuilder = MessageChatUpgradeFromBuilder;
1431
1432impl MessageChatUpgradeFromBuilder {
1433    pub fn build(&self) -> MessageChatUpgradeFrom {
1434        self.inner.clone()
1435    }
1436
1437    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
1438        self.inner.title = title.as_ref().to_string();
1439        self
1440    }
1441
1442    pub fn basic_group_id(&mut self, basic_group_id: i64) -> &mut Self {
1443        self.inner.basic_group_id = basic_group_id;
1444        self
1445    }
1446}
1447
1448impl AsRef<MessageChatUpgradeFrom> for MessageChatUpgradeFrom {
1449    fn as_ref(&self) -> &MessageChatUpgradeFrom {
1450        self
1451    }
1452}
1453
1454impl AsRef<MessageChatUpgradeFrom> for MessageChatUpgradeFromBuilder {
1455    fn as_ref(&self) -> &MessageChatUpgradeFrom {
1456        &self.inner
1457    }
1458}
1459
1460/// A basic group was upgraded to a supergroup and was deactivated as the result
1461#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1462pub struct MessageChatUpgradeTo {
1463    #[doc(hidden)]
1464    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1465    extra: Option<String>,
1466    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1467    client_id: Option<i32>,
1468    /// Identifier of the supergroup to which the basic group was upgraded
1469
1470    #[serde(default)]
1471    supergroup_id: i64,
1472}
1473
1474impl RObject for MessageChatUpgradeTo {
1475    #[doc(hidden)]
1476    fn extra(&self) -> Option<&str> {
1477        self.extra.as_deref()
1478    }
1479    #[doc(hidden)]
1480    fn client_id(&self) -> Option<i32> {
1481        self.client_id
1482    }
1483}
1484
1485impl TDMessageContent for MessageChatUpgradeTo {}
1486
1487impl MessageChatUpgradeTo {
1488    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1489        Ok(serde_json::from_str(json.as_ref())?)
1490    }
1491    pub fn builder() -> MessageChatUpgradeToBuilder {
1492        let mut inner = MessageChatUpgradeTo::default();
1493        inner.extra = Some(Uuid::new_v4().to_string());
1494
1495        MessageChatUpgradeToBuilder { inner }
1496    }
1497
1498    pub fn supergroup_id(&self) -> i64 {
1499        self.supergroup_id
1500    }
1501}
1502
1503#[doc(hidden)]
1504pub struct MessageChatUpgradeToBuilder {
1505    inner: MessageChatUpgradeTo,
1506}
1507
1508#[deprecated]
1509pub type RTDMessageChatUpgradeToBuilder = MessageChatUpgradeToBuilder;
1510
1511impl MessageChatUpgradeToBuilder {
1512    pub fn build(&self) -> MessageChatUpgradeTo {
1513        self.inner.clone()
1514    }
1515
1516    pub fn supergroup_id(&mut self, supergroup_id: i64) -> &mut Self {
1517        self.inner.supergroup_id = supergroup_id;
1518        self
1519    }
1520}
1521
1522impl AsRef<MessageChatUpgradeTo> for MessageChatUpgradeTo {
1523    fn as_ref(&self) -> &MessageChatUpgradeTo {
1524        self
1525    }
1526}
1527
1528impl AsRef<MessageChatUpgradeTo> for MessageChatUpgradeToBuilder {
1529    fn as_ref(&self) -> &MessageChatUpgradeTo {
1530        &self.inner
1531    }
1532}
1533
1534/// A message with a user contact
1535#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1536pub struct MessageContact {
1537    #[doc(hidden)]
1538    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1539    extra: Option<String>,
1540    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1541    client_id: Option<i32>,
1542    /// The contact description
1543    contact: Contact,
1544}
1545
1546impl RObject for MessageContact {
1547    #[doc(hidden)]
1548    fn extra(&self) -> Option<&str> {
1549        self.extra.as_deref()
1550    }
1551    #[doc(hidden)]
1552    fn client_id(&self) -> Option<i32> {
1553        self.client_id
1554    }
1555}
1556
1557impl TDMessageContent for MessageContact {}
1558
1559impl MessageContact {
1560    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1561        Ok(serde_json::from_str(json.as_ref())?)
1562    }
1563    pub fn builder() -> MessageContactBuilder {
1564        let mut inner = MessageContact::default();
1565        inner.extra = Some(Uuid::new_v4().to_string());
1566
1567        MessageContactBuilder { inner }
1568    }
1569
1570    pub fn contact(&self) -> &Contact {
1571        &self.contact
1572    }
1573}
1574
1575#[doc(hidden)]
1576pub struct MessageContactBuilder {
1577    inner: MessageContact,
1578}
1579
1580#[deprecated]
1581pub type RTDMessageContactBuilder = MessageContactBuilder;
1582
1583impl MessageContactBuilder {
1584    pub fn build(&self) -> MessageContact {
1585        self.inner.clone()
1586    }
1587
1588    pub fn contact<T: AsRef<Contact>>(&mut self, contact: T) -> &mut Self {
1589        self.inner.contact = contact.as_ref().clone();
1590        self
1591    }
1592}
1593
1594impl AsRef<MessageContact> for MessageContact {
1595    fn as_ref(&self) -> &MessageContact {
1596        self
1597    }
1598}
1599
1600impl AsRef<MessageContact> for MessageContactBuilder {
1601    fn as_ref(&self) -> &MessageContact {
1602        &self.inner
1603    }
1604}
1605
1606/// A contact has registered with Telegram
1607#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1608pub struct MessageContactRegistered {
1609    #[doc(hidden)]
1610    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1611    extra: Option<String>,
1612    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1613    client_id: Option<i32>,
1614}
1615
1616impl RObject for MessageContactRegistered {
1617    #[doc(hidden)]
1618    fn extra(&self) -> Option<&str> {
1619        self.extra.as_deref()
1620    }
1621    #[doc(hidden)]
1622    fn client_id(&self) -> Option<i32> {
1623        self.client_id
1624    }
1625}
1626
1627impl TDMessageContent for MessageContactRegistered {}
1628
1629impl MessageContactRegistered {
1630    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1631        Ok(serde_json::from_str(json.as_ref())?)
1632    }
1633    pub fn builder() -> MessageContactRegisteredBuilder {
1634        let mut inner = MessageContactRegistered::default();
1635        inner.extra = Some(Uuid::new_v4().to_string());
1636
1637        MessageContactRegisteredBuilder { inner }
1638    }
1639}
1640
1641#[doc(hidden)]
1642pub struct MessageContactRegisteredBuilder {
1643    inner: MessageContactRegistered,
1644}
1645
1646#[deprecated]
1647pub type RTDMessageContactRegisteredBuilder = MessageContactRegisteredBuilder;
1648
1649impl MessageContactRegisteredBuilder {
1650    pub fn build(&self) -> MessageContactRegistered {
1651        self.inner.clone()
1652    }
1653}
1654
1655impl AsRef<MessageContactRegistered> for MessageContactRegistered {
1656    fn as_ref(&self) -> &MessageContactRegistered {
1657        self
1658    }
1659}
1660
1661impl AsRef<MessageContactRegistered> for MessageContactRegisteredBuilder {
1662    fn as_ref(&self) -> &MessageContactRegistered {
1663        &self.inner
1664    }
1665}
1666
1667/// A non-standard action has happened in the chat
1668#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1669pub struct MessageCustomServiceAction {
1670    #[doc(hidden)]
1671    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1672    extra: Option<String>,
1673    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1674    client_id: Option<i32>,
1675    /// Message text to be shown in the chat
1676
1677    #[serde(default)]
1678    text: String,
1679}
1680
1681impl RObject for MessageCustomServiceAction {
1682    #[doc(hidden)]
1683    fn extra(&self) -> Option<&str> {
1684        self.extra.as_deref()
1685    }
1686    #[doc(hidden)]
1687    fn client_id(&self) -> Option<i32> {
1688        self.client_id
1689    }
1690}
1691
1692impl TDMessageContent for MessageCustomServiceAction {}
1693
1694impl MessageCustomServiceAction {
1695    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1696        Ok(serde_json::from_str(json.as_ref())?)
1697    }
1698    pub fn builder() -> MessageCustomServiceActionBuilder {
1699        let mut inner = MessageCustomServiceAction::default();
1700        inner.extra = Some(Uuid::new_v4().to_string());
1701
1702        MessageCustomServiceActionBuilder { inner }
1703    }
1704
1705    pub fn text(&self) -> &String {
1706        &self.text
1707    }
1708}
1709
1710#[doc(hidden)]
1711pub struct MessageCustomServiceActionBuilder {
1712    inner: MessageCustomServiceAction,
1713}
1714
1715#[deprecated]
1716pub type RTDMessageCustomServiceActionBuilder = MessageCustomServiceActionBuilder;
1717
1718impl MessageCustomServiceActionBuilder {
1719    pub fn build(&self) -> MessageCustomServiceAction {
1720        self.inner.clone()
1721    }
1722
1723    pub fn text<T: AsRef<str>>(&mut self, text: T) -> &mut Self {
1724        self.inner.text = text.as_ref().to_string();
1725        self
1726    }
1727}
1728
1729impl AsRef<MessageCustomServiceAction> for MessageCustomServiceAction {
1730    fn as_ref(&self) -> &MessageCustomServiceAction {
1731        self
1732    }
1733}
1734
1735impl AsRef<MessageCustomServiceAction> for MessageCustomServiceActionBuilder {
1736    fn as_ref(&self) -> &MessageCustomServiceAction {
1737        &self.inner
1738    }
1739}
1740
1741/// A dice message. The dice value is randomly generated by the server
1742#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1743pub struct MessageDice {
1744    #[doc(hidden)]
1745    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1746    extra: Option<String>,
1747    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1748    client_id: Option<i32>,
1749    /// The animated stickers with the initial dice animation; may be null if unknown. updateMessageContent will be sent when the sticker became known
1750    initial_state: Option<DiceStickers>,
1751    /// The animated stickers with the final dice animation; may be null if unknown. updateMessageContent will be sent when the sticker became known
1752    final_state: Option<DiceStickers>,
1753    /// Emoji on which the dice throw animation is based
1754
1755    #[serde(default)]
1756    emoji: String,
1757    /// The dice value. If the value is 0, the dice don't have final state yet
1758
1759    #[serde(default)]
1760    value: i32,
1761    /// Number of frame after which a success animation like a shower of confetti needs to be shown on updateMessageSendSucceeded
1762
1763    #[serde(default)]
1764    success_animation_frame_number: i32,
1765}
1766
1767impl RObject for MessageDice {
1768    #[doc(hidden)]
1769    fn extra(&self) -> Option<&str> {
1770        self.extra.as_deref()
1771    }
1772    #[doc(hidden)]
1773    fn client_id(&self) -> Option<i32> {
1774        self.client_id
1775    }
1776}
1777
1778impl TDMessageContent for MessageDice {}
1779
1780impl MessageDice {
1781    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1782        Ok(serde_json::from_str(json.as_ref())?)
1783    }
1784    pub fn builder() -> MessageDiceBuilder {
1785        let mut inner = MessageDice::default();
1786        inner.extra = Some(Uuid::new_v4().to_string());
1787
1788        MessageDiceBuilder { inner }
1789    }
1790
1791    pub fn initial_state(&self) -> &Option<DiceStickers> {
1792        &self.initial_state
1793    }
1794
1795    pub fn final_state(&self) -> &Option<DiceStickers> {
1796        &self.final_state
1797    }
1798
1799    pub fn emoji(&self) -> &String {
1800        &self.emoji
1801    }
1802
1803    pub fn value(&self) -> i32 {
1804        self.value
1805    }
1806
1807    pub fn success_animation_frame_number(&self) -> i32 {
1808        self.success_animation_frame_number
1809    }
1810}
1811
1812#[doc(hidden)]
1813pub struct MessageDiceBuilder {
1814    inner: MessageDice,
1815}
1816
1817#[deprecated]
1818pub type RTDMessageDiceBuilder = MessageDiceBuilder;
1819
1820impl MessageDiceBuilder {
1821    pub fn build(&self) -> MessageDice {
1822        self.inner.clone()
1823    }
1824
1825    pub fn initial_state<T: AsRef<DiceStickers>>(&mut self, initial_state: T) -> &mut Self {
1826        self.inner.initial_state = Some(initial_state.as_ref().clone());
1827        self
1828    }
1829
1830    pub fn final_state<T: AsRef<DiceStickers>>(&mut self, final_state: T) -> &mut Self {
1831        self.inner.final_state = Some(final_state.as_ref().clone());
1832        self
1833    }
1834
1835    pub fn emoji<T: AsRef<str>>(&mut self, emoji: T) -> &mut Self {
1836        self.inner.emoji = emoji.as_ref().to_string();
1837        self
1838    }
1839
1840    pub fn value(&mut self, value: i32) -> &mut Self {
1841        self.inner.value = value;
1842        self
1843    }
1844
1845    pub fn success_animation_frame_number(
1846        &mut self,
1847        success_animation_frame_number: i32,
1848    ) -> &mut Self {
1849        self.inner.success_animation_frame_number = success_animation_frame_number;
1850        self
1851    }
1852}
1853
1854impl AsRef<MessageDice> for MessageDice {
1855    fn as_ref(&self) -> &MessageDice {
1856        self
1857    }
1858}
1859
1860impl AsRef<MessageDice> for MessageDiceBuilder {
1861    fn as_ref(&self) -> &MessageDice {
1862        &self.inner
1863    }
1864}
1865
1866/// A document message (general file)
1867#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1868pub struct MessageDocument {
1869    #[doc(hidden)]
1870    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1871    extra: Option<String>,
1872    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1873    client_id: Option<i32>,
1874    /// The document description
1875    document: Document,
1876    /// Document caption
1877    caption: FormattedText,
1878}
1879
1880impl RObject for MessageDocument {
1881    #[doc(hidden)]
1882    fn extra(&self) -> Option<&str> {
1883        self.extra.as_deref()
1884    }
1885    #[doc(hidden)]
1886    fn client_id(&self) -> Option<i32> {
1887        self.client_id
1888    }
1889}
1890
1891impl TDMessageContent for MessageDocument {}
1892
1893impl MessageDocument {
1894    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1895        Ok(serde_json::from_str(json.as_ref())?)
1896    }
1897    pub fn builder() -> MessageDocumentBuilder {
1898        let mut inner = MessageDocument::default();
1899        inner.extra = Some(Uuid::new_v4().to_string());
1900
1901        MessageDocumentBuilder { inner }
1902    }
1903
1904    pub fn document(&self) -> &Document {
1905        &self.document
1906    }
1907
1908    pub fn caption(&self) -> &FormattedText {
1909        &self.caption
1910    }
1911}
1912
1913#[doc(hidden)]
1914pub struct MessageDocumentBuilder {
1915    inner: MessageDocument,
1916}
1917
1918#[deprecated]
1919pub type RTDMessageDocumentBuilder = MessageDocumentBuilder;
1920
1921impl MessageDocumentBuilder {
1922    pub fn build(&self) -> MessageDocument {
1923        self.inner.clone()
1924    }
1925
1926    pub fn document<T: AsRef<Document>>(&mut self, document: T) -> &mut Self {
1927        self.inner.document = document.as_ref().clone();
1928        self
1929    }
1930
1931    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
1932        self.inner.caption = caption.as_ref().clone();
1933        self
1934    }
1935}
1936
1937impl AsRef<MessageDocument> for MessageDocument {
1938    fn as_ref(&self) -> &MessageDocument {
1939        self
1940    }
1941}
1942
1943impl AsRef<MessageDocument> for MessageDocumentBuilder {
1944    fn as_ref(&self) -> &MessageDocument {
1945        &self.inner
1946    }
1947}
1948
1949/// An expired photo message (self-destructed after TTL has elapsed)
1950#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1951pub struct MessageExpiredPhoto {
1952    #[doc(hidden)]
1953    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
1954    extra: Option<String>,
1955    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
1956    client_id: Option<i32>,
1957}
1958
1959impl RObject for MessageExpiredPhoto {
1960    #[doc(hidden)]
1961    fn extra(&self) -> Option<&str> {
1962        self.extra.as_deref()
1963    }
1964    #[doc(hidden)]
1965    fn client_id(&self) -> Option<i32> {
1966        self.client_id
1967    }
1968}
1969
1970impl TDMessageContent for MessageExpiredPhoto {}
1971
1972impl MessageExpiredPhoto {
1973    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
1974        Ok(serde_json::from_str(json.as_ref())?)
1975    }
1976    pub fn builder() -> MessageExpiredPhotoBuilder {
1977        let mut inner = MessageExpiredPhoto::default();
1978        inner.extra = Some(Uuid::new_v4().to_string());
1979
1980        MessageExpiredPhotoBuilder { inner }
1981    }
1982}
1983
1984#[doc(hidden)]
1985pub struct MessageExpiredPhotoBuilder {
1986    inner: MessageExpiredPhoto,
1987}
1988
1989#[deprecated]
1990pub type RTDMessageExpiredPhotoBuilder = MessageExpiredPhotoBuilder;
1991
1992impl MessageExpiredPhotoBuilder {
1993    pub fn build(&self) -> MessageExpiredPhoto {
1994        self.inner.clone()
1995    }
1996}
1997
1998impl AsRef<MessageExpiredPhoto> for MessageExpiredPhoto {
1999    fn as_ref(&self) -> &MessageExpiredPhoto {
2000        self
2001    }
2002}
2003
2004impl AsRef<MessageExpiredPhoto> for MessageExpiredPhotoBuilder {
2005    fn as_ref(&self) -> &MessageExpiredPhoto {
2006        &self.inner
2007    }
2008}
2009
2010/// An expired video message (self-destructed after TTL has elapsed)
2011#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2012pub struct MessageExpiredVideo {
2013    #[doc(hidden)]
2014    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2015    extra: Option<String>,
2016    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2017    client_id: Option<i32>,
2018}
2019
2020impl RObject for MessageExpiredVideo {
2021    #[doc(hidden)]
2022    fn extra(&self) -> Option<&str> {
2023        self.extra.as_deref()
2024    }
2025    #[doc(hidden)]
2026    fn client_id(&self) -> Option<i32> {
2027        self.client_id
2028    }
2029}
2030
2031impl TDMessageContent for MessageExpiredVideo {}
2032
2033impl MessageExpiredVideo {
2034    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2035        Ok(serde_json::from_str(json.as_ref())?)
2036    }
2037    pub fn builder() -> MessageExpiredVideoBuilder {
2038        let mut inner = MessageExpiredVideo::default();
2039        inner.extra = Some(Uuid::new_v4().to_string());
2040
2041        MessageExpiredVideoBuilder { inner }
2042    }
2043}
2044
2045#[doc(hidden)]
2046pub struct MessageExpiredVideoBuilder {
2047    inner: MessageExpiredVideo,
2048}
2049
2050#[deprecated]
2051pub type RTDMessageExpiredVideoBuilder = MessageExpiredVideoBuilder;
2052
2053impl MessageExpiredVideoBuilder {
2054    pub fn build(&self) -> MessageExpiredVideo {
2055        self.inner.clone()
2056    }
2057}
2058
2059impl AsRef<MessageExpiredVideo> for MessageExpiredVideo {
2060    fn as_ref(&self) -> &MessageExpiredVideo {
2061        self
2062    }
2063}
2064
2065impl AsRef<MessageExpiredVideo> for MessageExpiredVideoBuilder {
2066    fn as_ref(&self) -> &MessageExpiredVideo {
2067        &self.inner
2068    }
2069}
2070
2071/// A message with a game
2072#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2073pub struct MessageGame {
2074    #[doc(hidden)]
2075    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2076    extra: Option<String>,
2077    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2078    client_id: Option<i32>,
2079    /// The game description
2080    game: Game,
2081}
2082
2083impl RObject for MessageGame {
2084    #[doc(hidden)]
2085    fn extra(&self) -> Option<&str> {
2086        self.extra.as_deref()
2087    }
2088    #[doc(hidden)]
2089    fn client_id(&self) -> Option<i32> {
2090        self.client_id
2091    }
2092}
2093
2094impl TDMessageContent for MessageGame {}
2095
2096impl MessageGame {
2097    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2098        Ok(serde_json::from_str(json.as_ref())?)
2099    }
2100    pub fn builder() -> MessageGameBuilder {
2101        let mut inner = MessageGame::default();
2102        inner.extra = Some(Uuid::new_v4().to_string());
2103
2104        MessageGameBuilder { inner }
2105    }
2106
2107    pub fn game(&self) -> &Game {
2108        &self.game
2109    }
2110}
2111
2112#[doc(hidden)]
2113pub struct MessageGameBuilder {
2114    inner: MessageGame,
2115}
2116
2117#[deprecated]
2118pub type RTDMessageGameBuilder = MessageGameBuilder;
2119
2120impl MessageGameBuilder {
2121    pub fn build(&self) -> MessageGame {
2122        self.inner.clone()
2123    }
2124
2125    pub fn game<T: AsRef<Game>>(&mut self, game: T) -> &mut Self {
2126        self.inner.game = game.as_ref().clone();
2127        self
2128    }
2129}
2130
2131impl AsRef<MessageGame> for MessageGame {
2132    fn as_ref(&self) -> &MessageGame {
2133        self
2134    }
2135}
2136
2137impl AsRef<MessageGame> for MessageGameBuilder {
2138    fn as_ref(&self) -> &MessageGame {
2139        &self.inner
2140    }
2141}
2142
2143/// A new high score was achieved in a game
2144#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2145pub struct MessageGameScore {
2146    #[doc(hidden)]
2147    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2148    extra: Option<String>,
2149    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2150    client_id: Option<i32>,
2151    /// Identifier of the message with the game, can be an identifier of a deleted message
2152
2153    #[serde(default)]
2154    game_message_id: i64,
2155    /// Identifier of the game; may be different from the games presented in the message with the game
2156
2157    #[serde(
2158        deserialize_with = "super::_common::number_from_string",
2159        serialize_with = "super::_common::string_to_number"
2160    )]
2161    #[serde(default)]
2162    game_id: i64,
2163    /// New score
2164
2165    #[serde(default)]
2166    score: i32,
2167}
2168
2169impl RObject for MessageGameScore {
2170    #[doc(hidden)]
2171    fn extra(&self) -> Option<&str> {
2172        self.extra.as_deref()
2173    }
2174    #[doc(hidden)]
2175    fn client_id(&self) -> Option<i32> {
2176        self.client_id
2177    }
2178}
2179
2180impl TDMessageContent for MessageGameScore {}
2181
2182impl MessageGameScore {
2183    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2184        Ok(serde_json::from_str(json.as_ref())?)
2185    }
2186    pub fn builder() -> MessageGameScoreBuilder {
2187        let mut inner = MessageGameScore::default();
2188        inner.extra = Some(Uuid::new_v4().to_string());
2189
2190        MessageGameScoreBuilder { inner }
2191    }
2192
2193    pub fn game_message_id(&self) -> i64 {
2194        self.game_message_id
2195    }
2196
2197    pub fn game_id(&self) -> i64 {
2198        self.game_id
2199    }
2200
2201    pub fn score(&self) -> i32 {
2202        self.score
2203    }
2204}
2205
2206#[doc(hidden)]
2207pub struct MessageGameScoreBuilder {
2208    inner: MessageGameScore,
2209}
2210
2211#[deprecated]
2212pub type RTDMessageGameScoreBuilder = MessageGameScoreBuilder;
2213
2214impl MessageGameScoreBuilder {
2215    pub fn build(&self) -> MessageGameScore {
2216        self.inner.clone()
2217    }
2218
2219    pub fn game_message_id(&mut self, game_message_id: i64) -> &mut Self {
2220        self.inner.game_message_id = game_message_id;
2221        self
2222    }
2223
2224    pub fn game_id(&mut self, game_id: i64) -> &mut Self {
2225        self.inner.game_id = game_id;
2226        self
2227    }
2228
2229    pub fn score(&mut self, score: i32) -> &mut Self {
2230        self.inner.score = score;
2231        self
2232    }
2233}
2234
2235impl AsRef<MessageGameScore> for MessageGameScore {
2236    fn as_ref(&self) -> &MessageGameScore {
2237        self
2238    }
2239}
2240
2241impl AsRef<MessageGameScore> for MessageGameScoreBuilder {
2242    fn as_ref(&self) -> &MessageGameScore {
2243        &self.inner
2244    }
2245}
2246
2247/// A message with information about an invite to a video chat
2248#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2249pub struct MessageInviteVideoChatParticipants {
2250    #[doc(hidden)]
2251    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2252    extra: Option<String>,
2253    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2254    client_id: Option<i32>,
2255    /// Identifier of the video chat. The video chat can be received through the method getGroupCall
2256
2257    #[serde(default)]
2258    group_call_id: i32,
2259    /// Invited user identifiers
2260
2261    #[serde(default)]
2262    user_ids: Vec<i64>,
2263}
2264
2265impl RObject for MessageInviteVideoChatParticipants {
2266    #[doc(hidden)]
2267    fn extra(&self) -> Option<&str> {
2268        self.extra.as_deref()
2269    }
2270    #[doc(hidden)]
2271    fn client_id(&self) -> Option<i32> {
2272        self.client_id
2273    }
2274}
2275
2276impl TDMessageContent for MessageInviteVideoChatParticipants {}
2277
2278impl MessageInviteVideoChatParticipants {
2279    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2280        Ok(serde_json::from_str(json.as_ref())?)
2281    }
2282    pub fn builder() -> MessageInviteVideoChatParticipantsBuilder {
2283        let mut inner = MessageInviteVideoChatParticipants::default();
2284        inner.extra = Some(Uuid::new_v4().to_string());
2285
2286        MessageInviteVideoChatParticipantsBuilder { inner }
2287    }
2288
2289    pub fn group_call_id(&self) -> i32 {
2290        self.group_call_id
2291    }
2292
2293    pub fn user_ids(&self) -> &Vec<i64> {
2294        &self.user_ids
2295    }
2296}
2297
2298#[doc(hidden)]
2299pub struct MessageInviteVideoChatParticipantsBuilder {
2300    inner: MessageInviteVideoChatParticipants,
2301}
2302
2303#[deprecated]
2304pub type RTDMessageInviteVideoChatParticipantsBuilder = MessageInviteVideoChatParticipantsBuilder;
2305
2306impl MessageInviteVideoChatParticipantsBuilder {
2307    pub fn build(&self) -> MessageInviteVideoChatParticipants {
2308        self.inner.clone()
2309    }
2310
2311    pub fn group_call_id(&mut self, group_call_id: i32) -> &mut Self {
2312        self.inner.group_call_id = group_call_id;
2313        self
2314    }
2315
2316    pub fn user_ids(&mut self, user_ids: Vec<i64>) -> &mut Self {
2317        self.inner.user_ids = user_ids;
2318        self
2319    }
2320}
2321
2322impl AsRef<MessageInviteVideoChatParticipants> for MessageInviteVideoChatParticipants {
2323    fn as_ref(&self) -> &MessageInviteVideoChatParticipants {
2324        self
2325    }
2326}
2327
2328impl AsRef<MessageInviteVideoChatParticipants> for MessageInviteVideoChatParticipantsBuilder {
2329    fn as_ref(&self) -> &MessageInviteVideoChatParticipants {
2330        &self.inner
2331    }
2332}
2333
2334/// A message with an invoice from a bot
2335#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2336pub struct MessageInvoice {
2337    #[doc(hidden)]
2338    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2339    extra: Option<String>,
2340    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2341    client_id: Option<i32>,
2342    /// Product title
2343
2344    #[serde(default)]
2345    title: String,
2346    /// A message with an invoice from a bot
2347
2348    #[serde(default)]
2349    description: String,
2350    /// Product photo; may be null
2351    photo: Option<Photo>,
2352    /// Currency for the product price
2353
2354    #[serde(default)]
2355    currency: String,
2356    /// Product total price in the smallest units of the currency
2357
2358    #[serde(default)]
2359    total_amount: i64,
2360    /// Unique invoice bot start_parameter. To share an invoice use the URL https://t.me/{bot_username}?start={start_parameter}
2361
2362    #[serde(default)]
2363    start_parameter: String,
2364    /// True, if the invoice is a test invoice
2365
2366    #[serde(default)]
2367    is_test: bool,
2368    /// True, if the shipping address must be specified
2369
2370    #[serde(default)]
2371    need_shipping_address: bool,
2372    /// The identifier of the message with the receipt, after the product has been purchased
2373
2374    #[serde(default)]
2375    receipt_message_id: i64,
2376}
2377
2378impl RObject for MessageInvoice {
2379    #[doc(hidden)]
2380    fn extra(&self) -> Option<&str> {
2381        self.extra.as_deref()
2382    }
2383    #[doc(hidden)]
2384    fn client_id(&self) -> Option<i32> {
2385        self.client_id
2386    }
2387}
2388
2389impl TDMessageContent for MessageInvoice {}
2390
2391impl MessageInvoice {
2392    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2393        Ok(serde_json::from_str(json.as_ref())?)
2394    }
2395    pub fn builder() -> MessageInvoiceBuilder {
2396        let mut inner = MessageInvoice::default();
2397        inner.extra = Some(Uuid::new_v4().to_string());
2398
2399        MessageInvoiceBuilder { inner }
2400    }
2401
2402    pub fn title(&self) -> &String {
2403        &self.title
2404    }
2405
2406    pub fn description(&self) -> &String {
2407        &self.description
2408    }
2409
2410    pub fn photo(&self) -> &Option<Photo> {
2411        &self.photo
2412    }
2413
2414    pub fn currency(&self) -> &String {
2415        &self.currency
2416    }
2417
2418    pub fn total_amount(&self) -> i64 {
2419        self.total_amount
2420    }
2421
2422    pub fn start_parameter(&self) -> &String {
2423        &self.start_parameter
2424    }
2425
2426    pub fn is_test(&self) -> bool {
2427        self.is_test
2428    }
2429
2430    pub fn need_shipping_address(&self) -> bool {
2431        self.need_shipping_address
2432    }
2433
2434    pub fn receipt_message_id(&self) -> i64 {
2435        self.receipt_message_id
2436    }
2437}
2438
2439#[doc(hidden)]
2440pub struct MessageInvoiceBuilder {
2441    inner: MessageInvoice,
2442}
2443
2444#[deprecated]
2445pub type RTDMessageInvoiceBuilder = MessageInvoiceBuilder;
2446
2447impl MessageInvoiceBuilder {
2448    pub fn build(&self) -> MessageInvoice {
2449        self.inner.clone()
2450    }
2451
2452    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
2453        self.inner.title = title.as_ref().to_string();
2454        self
2455    }
2456
2457    pub fn description<T: AsRef<str>>(&mut self, description: T) -> &mut Self {
2458        self.inner.description = description.as_ref().to_string();
2459        self
2460    }
2461
2462    pub fn photo<T: AsRef<Photo>>(&mut self, photo: T) -> &mut Self {
2463        self.inner.photo = Some(photo.as_ref().clone());
2464        self
2465    }
2466
2467    pub fn currency<T: AsRef<str>>(&mut self, currency: T) -> &mut Self {
2468        self.inner.currency = currency.as_ref().to_string();
2469        self
2470    }
2471
2472    pub fn total_amount(&mut self, total_amount: i64) -> &mut Self {
2473        self.inner.total_amount = total_amount;
2474        self
2475    }
2476
2477    pub fn start_parameter<T: AsRef<str>>(&mut self, start_parameter: T) -> &mut Self {
2478        self.inner.start_parameter = start_parameter.as_ref().to_string();
2479        self
2480    }
2481
2482    pub fn is_test(&mut self, is_test: bool) -> &mut Self {
2483        self.inner.is_test = is_test;
2484        self
2485    }
2486
2487    pub fn need_shipping_address(&mut self, need_shipping_address: bool) -> &mut Self {
2488        self.inner.need_shipping_address = need_shipping_address;
2489        self
2490    }
2491
2492    pub fn receipt_message_id(&mut self, receipt_message_id: i64) -> &mut Self {
2493        self.inner.receipt_message_id = receipt_message_id;
2494        self
2495    }
2496}
2497
2498impl AsRef<MessageInvoice> for MessageInvoice {
2499    fn as_ref(&self) -> &MessageInvoice {
2500        self
2501    }
2502}
2503
2504impl AsRef<MessageInvoice> for MessageInvoiceBuilder {
2505    fn as_ref(&self) -> &MessageInvoice {
2506        &self.inner
2507    }
2508}
2509
2510/// A message with a location
2511#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2512pub struct MessageLocation {
2513    #[doc(hidden)]
2514    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2515    extra: Option<String>,
2516    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2517    client_id: Option<i32>,
2518    /// The location description
2519    location: Location,
2520    /// Time relative to the message send date, for which the location can be updated, in seconds
2521
2522    #[serde(default)]
2523    live_period: i32,
2524    /// Left time for which the location can be updated, in seconds. updateMessageContent is not sent when this field changes
2525
2526    #[serde(default)]
2527    expires_in: i32,
2528    /// For live locations, a direction in which the location moves, in degrees; 1-360. If 0 the direction is unknown
2529
2530    #[serde(default)]
2531    heading: i32,
2532    /// For live locations, a maximum distance to another chat member for proximity alerts, in meters (0-100000). 0 if the notification is disabled. Available only for the message sender
2533
2534    #[serde(default)]
2535    proximity_alert_radius: i32,
2536}
2537
2538impl RObject for MessageLocation {
2539    #[doc(hidden)]
2540    fn extra(&self) -> Option<&str> {
2541        self.extra.as_deref()
2542    }
2543    #[doc(hidden)]
2544    fn client_id(&self) -> Option<i32> {
2545        self.client_id
2546    }
2547}
2548
2549impl TDMessageContent for MessageLocation {}
2550
2551impl MessageLocation {
2552    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2553        Ok(serde_json::from_str(json.as_ref())?)
2554    }
2555    pub fn builder() -> MessageLocationBuilder {
2556        let mut inner = MessageLocation::default();
2557        inner.extra = Some(Uuid::new_v4().to_string());
2558
2559        MessageLocationBuilder { inner }
2560    }
2561
2562    pub fn location(&self) -> &Location {
2563        &self.location
2564    }
2565
2566    pub fn live_period(&self) -> i32 {
2567        self.live_period
2568    }
2569
2570    pub fn expires_in(&self) -> i32 {
2571        self.expires_in
2572    }
2573
2574    pub fn heading(&self) -> i32 {
2575        self.heading
2576    }
2577
2578    pub fn proximity_alert_radius(&self) -> i32 {
2579        self.proximity_alert_radius
2580    }
2581}
2582
2583#[doc(hidden)]
2584pub struct MessageLocationBuilder {
2585    inner: MessageLocation,
2586}
2587
2588#[deprecated]
2589pub type RTDMessageLocationBuilder = MessageLocationBuilder;
2590
2591impl MessageLocationBuilder {
2592    pub fn build(&self) -> MessageLocation {
2593        self.inner.clone()
2594    }
2595
2596    pub fn location<T: AsRef<Location>>(&mut self, location: T) -> &mut Self {
2597        self.inner.location = location.as_ref().clone();
2598        self
2599    }
2600
2601    pub fn live_period(&mut self, live_period: i32) -> &mut Self {
2602        self.inner.live_period = live_period;
2603        self
2604    }
2605
2606    pub fn expires_in(&mut self, expires_in: i32) -> &mut Self {
2607        self.inner.expires_in = expires_in;
2608        self
2609    }
2610
2611    pub fn heading(&mut self, heading: i32) -> &mut Self {
2612        self.inner.heading = heading;
2613        self
2614    }
2615
2616    pub fn proximity_alert_radius(&mut self, proximity_alert_radius: i32) -> &mut Self {
2617        self.inner.proximity_alert_radius = proximity_alert_radius;
2618        self
2619    }
2620}
2621
2622impl AsRef<MessageLocation> for MessageLocation {
2623    fn as_ref(&self) -> &MessageLocation {
2624        self
2625    }
2626}
2627
2628impl AsRef<MessageLocation> for MessageLocationBuilder {
2629    fn as_ref(&self) -> &MessageLocation {
2630        &self.inner
2631    }
2632}
2633
2634/// Telegram Passport data has been received; for bots only
2635#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2636pub struct MessagePassportDataReceived {
2637    #[doc(hidden)]
2638    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2639    extra: Option<String>,
2640    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2641    client_id: Option<i32>,
2642    /// List of received Telegram Passport elements
2643
2644    #[serde(default)]
2645    elements: Vec<EncryptedPassportElement>,
2646    /// Encrypted data credentials
2647    credentials: EncryptedCredentials,
2648}
2649
2650impl RObject for MessagePassportDataReceived {
2651    #[doc(hidden)]
2652    fn extra(&self) -> Option<&str> {
2653        self.extra.as_deref()
2654    }
2655    #[doc(hidden)]
2656    fn client_id(&self) -> Option<i32> {
2657        self.client_id
2658    }
2659}
2660
2661impl TDMessageContent for MessagePassportDataReceived {}
2662
2663impl MessagePassportDataReceived {
2664    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2665        Ok(serde_json::from_str(json.as_ref())?)
2666    }
2667    pub fn builder() -> MessagePassportDataReceivedBuilder {
2668        let mut inner = MessagePassportDataReceived::default();
2669        inner.extra = Some(Uuid::new_v4().to_string());
2670
2671        MessagePassportDataReceivedBuilder { inner }
2672    }
2673
2674    pub fn elements(&self) -> &Vec<EncryptedPassportElement> {
2675        &self.elements
2676    }
2677
2678    pub fn credentials(&self) -> &EncryptedCredentials {
2679        &self.credentials
2680    }
2681}
2682
2683#[doc(hidden)]
2684pub struct MessagePassportDataReceivedBuilder {
2685    inner: MessagePassportDataReceived,
2686}
2687
2688#[deprecated]
2689pub type RTDMessagePassportDataReceivedBuilder = MessagePassportDataReceivedBuilder;
2690
2691impl MessagePassportDataReceivedBuilder {
2692    pub fn build(&self) -> MessagePassportDataReceived {
2693        self.inner.clone()
2694    }
2695
2696    pub fn elements(&mut self, elements: Vec<EncryptedPassportElement>) -> &mut Self {
2697        self.inner.elements = elements;
2698        self
2699    }
2700
2701    pub fn credentials<T: AsRef<EncryptedCredentials>>(&mut self, credentials: T) -> &mut Self {
2702        self.inner.credentials = credentials.as_ref().clone();
2703        self
2704    }
2705}
2706
2707impl AsRef<MessagePassportDataReceived> for MessagePassportDataReceived {
2708    fn as_ref(&self) -> &MessagePassportDataReceived {
2709        self
2710    }
2711}
2712
2713impl AsRef<MessagePassportDataReceived> for MessagePassportDataReceivedBuilder {
2714    fn as_ref(&self) -> &MessagePassportDataReceived {
2715        &self.inner
2716    }
2717}
2718
2719/// Telegram Passport data has been sent
2720#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2721pub struct MessagePassportDataSent {
2722    #[doc(hidden)]
2723    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2724    extra: Option<String>,
2725    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2726    client_id: Option<i32>,
2727    /// List of Telegram Passport element types sent
2728
2729    #[serde(default)]
2730    types: Vec<PassportElementType>,
2731}
2732
2733impl RObject for MessagePassportDataSent {
2734    #[doc(hidden)]
2735    fn extra(&self) -> Option<&str> {
2736        self.extra.as_deref()
2737    }
2738    #[doc(hidden)]
2739    fn client_id(&self) -> Option<i32> {
2740        self.client_id
2741    }
2742}
2743
2744impl TDMessageContent for MessagePassportDataSent {}
2745
2746impl MessagePassportDataSent {
2747    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2748        Ok(serde_json::from_str(json.as_ref())?)
2749    }
2750    pub fn builder() -> MessagePassportDataSentBuilder {
2751        let mut inner = MessagePassportDataSent::default();
2752        inner.extra = Some(Uuid::new_v4().to_string());
2753
2754        MessagePassportDataSentBuilder { inner }
2755    }
2756
2757    pub fn types(&self) -> &Vec<PassportElementType> {
2758        &self.types
2759    }
2760}
2761
2762#[doc(hidden)]
2763pub struct MessagePassportDataSentBuilder {
2764    inner: MessagePassportDataSent,
2765}
2766
2767#[deprecated]
2768pub type RTDMessagePassportDataSentBuilder = MessagePassportDataSentBuilder;
2769
2770impl MessagePassportDataSentBuilder {
2771    pub fn build(&self) -> MessagePassportDataSent {
2772        self.inner.clone()
2773    }
2774
2775    pub fn types(&mut self, types: Vec<PassportElementType>) -> &mut Self {
2776        self.inner.types = types;
2777        self
2778    }
2779}
2780
2781impl AsRef<MessagePassportDataSent> for MessagePassportDataSent {
2782    fn as_ref(&self) -> &MessagePassportDataSent {
2783        self
2784    }
2785}
2786
2787impl AsRef<MessagePassportDataSent> for MessagePassportDataSentBuilder {
2788    fn as_ref(&self) -> &MessagePassportDataSent {
2789        &self.inner
2790    }
2791}
2792
2793/// A payment has been completed
2794#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2795pub struct MessagePaymentSuccessful {
2796    #[doc(hidden)]
2797    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2798    extra: Option<String>,
2799    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2800    client_id: Option<i32>,
2801    /// Identifier of the chat, containing the corresponding invoice message; 0 if unknown
2802
2803    #[serde(default)]
2804    invoice_chat_id: i64,
2805    /// Identifier of the message with the corresponding invoice; can be an identifier of a deleted message
2806
2807    #[serde(default)]
2808    invoice_message_id: i64,
2809    /// Currency for the price of the product
2810
2811    #[serde(default)]
2812    currency: String,
2813    /// Total price for the product, in the smallest units of the currency
2814
2815    #[serde(default)]
2816    total_amount: i64,
2817}
2818
2819impl RObject for MessagePaymentSuccessful {
2820    #[doc(hidden)]
2821    fn extra(&self) -> Option<&str> {
2822        self.extra.as_deref()
2823    }
2824    #[doc(hidden)]
2825    fn client_id(&self) -> Option<i32> {
2826        self.client_id
2827    }
2828}
2829
2830impl TDMessageContent for MessagePaymentSuccessful {}
2831
2832impl MessagePaymentSuccessful {
2833    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2834        Ok(serde_json::from_str(json.as_ref())?)
2835    }
2836    pub fn builder() -> MessagePaymentSuccessfulBuilder {
2837        let mut inner = MessagePaymentSuccessful::default();
2838        inner.extra = Some(Uuid::new_v4().to_string());
2839
2840        MessagePaymentSuccessfulBuilder { inner }
2841    }
2842
2843    pub fn invoice_chat_id(&self) -> i64 {
2844        self.invoice_chat_id
2845    }
2846
2847    pub fn invoice_message_id(&self) -> i64 {
2848        self.invoice_message_id
2849    }
2850
2851    pub fn currency(&self) -> &String {
2852        &self.currency
2853    }
2854
2855    pub fn total_amount(&self) -> i64 {
2856        self.total_amount
2857    }
2858}
2859
2860#[doc(hidden)]
2861pub struct MessagePaymentSuccessfulBuilder {
2862    inner: MessagePaymentSuccessful,
2863}
2864
2865#[deprecated]
2866pub type RTDMessagePaymentSuccessfulBuilder = MessagePaymentSuccessfulBuilder;
2867
2868impl MessagePaymentSuccessfulBuilder {
2869    pub fn build(&self) -> MessagePaymentSuccessful {
2870        self.inner.clone()
2871    }
2872
2873    pub fn invoice_chat_id(&mut self, invoice_chat_id: i64) -> &mut Self {
2874        self.inner.invoice_chat_id = invoice_chat_id;
2875        self
2876    }
2877
2878    pub fn invoice_message_id(&mut self, invoice_message_id: i64) -> &mut Self {
2879        self.inner.invoice_message_id = invoice_message_id;
2880        self
2881    }
2882
2883    pub fn currency<T: AsRef<str>>(&mut self, currency: T) -> &mut Self {
2884        self.inner.currency = currency.as_ref().to_string();
2885        self
2886    }
2887
2888    pub fn total_amount(&mut self, total_amount: i64) -> &mut Self {
2889        self.inner.total_amount = total_amount;
2890        self
2891    }
2892}
2893
2894impl AsRef<MessagePaymentSuccessful> for MessagePaymentSuccessful {
2895    fn as_ref(&self) -> &MessagePaymentSuccessful {
2896        self
2897    }
2898}
2899
2900impl AsRef<MessagePaymentSuccessful> for MessagePaymentSuccessfulBuilder {
2901    fn as_ref(&self) -> &MessagePaymentSuccessful {
2902        &self.inner
2903    }
2904}
2905
2906/// A payment has been completed; for bots only
2907#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2908pub struct MessagePaymentSuccessfulBot {
2909    #[doc(hidden)]
2910    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
2911    extra: Option<String>,
2912    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
2913    client_id: Option<i32>,
2914    /// Currency for price of the product
2915
2916    #[serde(default)]
2917    currency: String,
2918    /// Total price for the product, in the smallest units of the currency
2919
2920    #[serde(default)]
2921    total_amount: i64,
2922    /// Invoice payload
2923
2924    #[serde(default)]
2925    invoice_payload: String,
2926    /// Identifier of the shipping option chosen by the user; may be empty if not applicable
2927
2928    #[serde(default)]
2929    shipping_option_id: String,
2930    /// Information about the order; may be null
2931    order_info: Option<OrderInfo>,
2932    /// Telegram payment identifier
2933
2934    #[serde(default)]
2935    telegram_payment_charge_id: String,
2936    /// Provider payment identifier
2937
2938    #[serde(default)]
2939    provider_payment_charge_id: String,
2940}
2941
2942impl RObject for MessagePaymentSuccessfulBot {
2943    #[doc(hidden)]
2944    fn extra(&self) -> Option<&str> {
2945        self.extra.as_deref()
2946    }
2947    #[doc(hidden)]
2948    fn client_id(&self) -> Option<i32> {
2949        self.client_id
2950    }
2951}
2952
2953impl TDMessageContent for MessagePaymentSuccessfulBot {}
2954
2955impl MessagePaymentSuccessfulBot {
2956    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
2957        Ok(serde_json::from_str(json.as_ref())?)
2958    }
2959    pub fn builder() -> MessagePaymentSuccessfulBotBuilder {
2960        let mut inner = MessagePaymentSuccessfulBot::default();
2961        inner.extra = Some(Uuid::new_v4().to_string());
2962
2963        MessagePaymentSuccessfulBotBuilder { inner }
2964    }
2965
2966    pub fn currency(&self) -> &String {
2967        &self.currency
2968    }
2969
2970    pub fn total_amount(&self) -> i64 {
2971        self.total_amount
2972    }
2973
2974    pub fn invoice_payload(&self) -> &String {
2975        &self.invoice_payload
2976    }
2977
2978    pub fn shipping_option_id(&self) -> &String {
2979        &self.shipping_option_id
2980    }
2981
2982    pub fn order_info(&self) -> &Option<OrderInfo> {
2983        &self.order_info
2984    }
2985
2986    pub fn telegram_payment_charge_id(&self) -> &String {
2987        &self.telegram_payment_charge_id
2988    }
2989
2990    pub fn provider_payment_charge_id(&self) -> &String {
2991        &self.provider_payment_charge_id
2992    }
2993}
2994
2995#[doc(hidden)]
2996pub struct MessagePaymentSuccessfulBotBuilder {
2997    inner: MessagePaymentSuccessfulBot,
2998}
2999
3000#[deprecated]
3001pub type RTDMessagePaymentSuccessfulBotBuilder = MessagePaymentSuccessfulBotBuilder;
3002
3003impl MessagePaymentSuccessfulBotBuilder {
3004    pub fn build(&self) -> MessagePaymentSuccessfulBot {
3005        self.inner.clone()
3006    }
3007
3008    pub fn currency<T: AsRef<str>>(&mut self, currency: T) -> &mut Self {
3009        self.inner.currency = currency.as_ref().to_string();
3010        self
3011    }
3012
3013    pub fn total_amount(&mut self, total_amount: i64) -> &mut Self {
3014        self.inner.total_amount = total_amount;
3015        self
3016    }
3017
3018    pub fn invoice_payload<T: AsRef<str>>(&mut self, invoice_payload: T) -> &mut Self {
3019        self.inner.invoice_payload = invoice_payload.as_ref().to_string();
3020        self
3021    }
3022
3023    pub fn shipping_option_id<T: AsRef<str>>(&mut self, shipping_option_id: T) -> &mut Self {
3024        self.inner.shipping_option_id = shipping_option_id.as_ref().to_string();
3025        self
3026    }
3027
3028    pub fn order_info<T: AsRef<OrderInfo>>(&mut self, order_info: T) -> &mut Self {
3029        self.inner.order_info = Some(order_info.as_ref().clone());
3030        self
3031    }
3032
3033    pub fn telegram_payment_charge_id<T: AsRef<str>>(
3034        &mut self,
3035        telegram_payment_charge_id: T,
3036    ) -> &mut Self {
3037        self.inner.telegram_payment_charge_id = telegram_payment_charge_id.as_ref().to_string();
3038        self
3039    }
3040
3041    pub fn provider_payment_charge_id<T: AsRef<str>>(
3042        &mut self,
3043        provider_payment_charge_id: T,
3044    ) -> &mut Self {
3045        self.inner.provider_payment_charge_id = provider_payment_charge_id.as_ref().to_string();
3046        self
3047    }
3048}
3049
3050impl AsRef<MessagePaymentSuccessfulBot> for MessagePaymentSuccessfulBot {
3051    fn as_ref(&self) -> &MessagePaymentSuccessfulBot {
3052        self
3053    }
3054}
3055
3056impl AsRef<MessagePaymentSuccessfulBot> for MessagePaymentSuccessfulBotBuilder {
3057    fn as_ref(&self) -> &MessagePaymentSuccessfulBot {
3058        &self.inner
3059    }
3060}
3061
3062/// A photo message
3063#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3064pub struct MessagePhoto {
3065    #[doc(hidden)]
3066    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3067    extra: Option<String>,
3068    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3069    client_id: Option<i32>,
3070    /// The photo description
3071    photo: Photo,
3072    /// Photo caption
3073    caption: FormattedText,
3074    /// True, if the photo must be blurred and must be shown only while tapped
3075
3076    #[serde(default)]
3077    is_secret: bool,
3078}
3079
3080impl RObject for MessagePhoto {
3081    #[doc(hidden)]
3082    fn extra(&self) -> Option<&str> {
3083        self.extra.as_deref()
3084    }
3085    #[doc(hidden)]
3086    fn client_id(&self) -> Option<i32> {
3087        self.client_id
3088    }
3089}
3090
3091impl TDMessageContent for MessagePhoto {}
3092
3093impl MessagePhoto {
3094    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3095        Ok(serde_json::from_str(json.as_ref())?)
3096    }
3097    pub fn builder() -> MessagePhotoBuilder {
3098        let mut inner = MessagePhoto::default();
3099        inner.extra = Some(Uuid::new_v4().to_string());
3100
3101        MessagePhotoBuilder { inner }
3102    }
3103
3104    pub fn photo(&self) -> &Photo {
3105        &self.photo
3106    }
3107
3108    pub fn caption(&self) -> &FormattedText {
3109        &self.caption
3110    }
3111
3112    pub fn is_secret(&self) -> bool {
3113        self.is_secret
3114    }
3115}
3116
3117#[doc(hidden)]
3118pub struct MessagePhotoBuilder {
3119    inner: MessagePhoto,
3120}
3121
3122#[deprecated]
3123pub type RTDMessagePhotoBuilder = MessagePhotoBuilder;
3124
3125impl MessagePhotoBuilder {
3126    pub fn build(&self) -> MessagePhoto {
3127        self.inner.clone()
3128    }
3129
3130    pub fn photo<T: AsRef<Photo>>(&mut self, photo: T) -> &mut Self {
3131        self.inner.photo = photo.as_ref().clone();
3132        self
3133    }
3134
3135    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
3136        self.inner.caption = caption.as_ref().clone();
3137        self
3138    }
3139
3140    pub fn is_secret(&mut self, is_secret: bool) -> &mut Self {
3141        self.inner.is_secret = is_secret;
3142        self
3143    }
3144}
3145
3146impl AsRef<MessagePhoto> for MessagePhoto {
3147    fn as_ref(&self) -> &MessagePhoto {
3148        self
3149    }
3150}
3151
3152impl AsRef<MessagePhoto> for MessagePhotoBuilder {
3153    fn as_ref(&self) -> &MessagePhoto {
3154        &self.inner
3155    }
3156}
3157
3158/// A message has been pinned
3159#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3160pub struct MessagePinMessage {
3161    #[doc(hidden)]
3162    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3163    extra: Option<String>,
3164    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3165    client_id: Option<i32>,
3166    /// Identifier of the pinned message, can be an identifier of a deleted message or 0
3167
3168    #[serde(default)]
3169    message_id: i64,
3170}
3171
3172impl RObject for MessagePinMessage {
3173    #[doc(hidden)]
3174    fn extra(&self) -> Option<&str> {
3175        self.extra.as_deref()
3176    }
3177    #[doc(hidden)]
3178    fn client_id(&self) -> Option<i32> {
3179        self.client_id
3180    }
3181}
3182
3183impl TDMessageContent for MessagePinMessage {}
3184
3185impl MessagePinMessage {
3186    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3187        Ok(serde_json::from_str(json.as_ref())?)
3188    }
3189    pub fn builder() -> MessagePinMessageBuilder {
3190        let mut inner = MessagePinMessage::default();
3191        inner.extra = Some(Uuid::new_v4().to_string());
3192
3193        MessagePinMessageBuilder { inner }
3194    }
3195
3196    pub fn message_id(&self) -> i64 {
3197        self.message_id
3198    }
3199}
3200
3201#[doc(hidden)]
3202pub struct MessagePinMessageBuilder {
3203    inner: MessagePinMessage,
3204}
3205
3206#[deprecated]
3207pub type RTDMessagePinMessageBuilder = MessagePinMessageBuilder;
3208
3209impl MessagePinMessageBuilder {
3210    pub fn build(&self) -> MessagePinMessage {
3211        self.inner.clone()
3212    }
3213
3214    pub fn message_id(&mut self, message_id: i64) -> &mut Self {
3215        self.inner.message_id = message_id;
3216        self
3217    }
3218}
3219
3220impl AsRef<MessagePinMessage> for MessagePinMessage {
3221    fn as_ref(&self) -> &MessagePinMessage {
3222        self
3223    }
3224}
3225
3226impl AsRef<MessagePinMessage> for MessagePinMessageBuilder {
3227    fn as_ref(&self) -> &MessagePinMessage {
3228        &self.inner
3229    }
3230}
3231
3232/// A message with a poll
3233#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3234pub struct MessagePoll {
3235    #[doc(hidden)]
3236    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3237    extra: Option<String>,
3238    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3239    client_id: Option<i32>,
3240    /// The poll description
3241    poll: Poll,
3242}
3243
3244impl RObject for MessagePoll {
3245    #[doc(hidden)]
3246    fn extra(&self) -> Option<&str> {
3247        self.extra.as_deref()
3248    }
3249    #[doc(hidden)]
3250    fn client_id(&self) -> Option<i32> {
3251        self.client_id
3252    }
3253}
3254
3255impl TDMessageContent for MessagePoll {}
3256
3257impl MessagePoll {
3258    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3259        Ok(serde_json::from_str(json.as_ref())?)
3260    }
3261    pub fn builder() -> MessagePollBuilder {
3262        let mut inner = MessagePoll::default();
3263        inner.extra = Some(Uuid::new_v4().to_string());
3264
3265        MessagePollBuilder { inner }
3266    }
3267
3268    pub fn poll(&self) -> &Poll {
3269        &self.poll
3270    }
3271}
3272
3273#[doc(hidden)]
3274pub struct MessagePollBuilder {
3275    inner: MessagePoll,
3276}
3277
3278#[deprecated]
3279pub type RTDMessagePollBuilder = MessagePollBuilder;
3280
3281impl MessagePollBuilder {
3282    pub fn build(&self) -> MessagePoll {
3283        self.inner.clone()
3284    }
3285
3286    pub fn poll<T: AsRef<Poll>>(&mut self, poll: T) -> &mut Self {
3287        self.inner.poll = poll.as_ref().clone();
3288        self
3289    }
3290}
3291
3292impl AsRef<MessagePoll> for MessagePoll {
3293    fn as_ref(&self) -> &MessagePoll {
3294        self
3295    }
3296}
3297
3298impl AsRef<MessagePoll> for MessagePollBuilder {
3299    fn as_ref(&self) -> &MessagePoll {
3300        &self.inner
3301    }
3302}
3303
3304/// A user in the chat came within proximity alert range
3305#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3306pub struct MessageProximityAlertTriggered {
3307    #[doc(hidden)]
3308    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3309    extra: Option<String>,
3310    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3311    client_id: Option<i32>,
3312    /// The identifier of a user or chat that triggered the proximity alert
3313
3314    #[serde(skip_serializing_if = "MessageSender::_is_default")]
3315    traveler_id: MessageSender,
3316    /// The identifier of a user or chat that subscribed for the proximity alert
3317
3318    #[serde(skip_serializing_if = "MessageSender::_is_default")]
3319    watcher_id: MessageSender,
3320    /// The distance between the users
3321
3322    #[serde(default)]
3323    distance: i32,
3324}
3325
3326impl RObject for MessageProximityAlertTriggered {
3327    #[doc(hidden)]
3328    fn extra(&self) -> Option<&str> {
3329        self.extra.as_deref()
3330    }
3331    #[doc(hidden)]
3332    fn client_id(&self) -> Option<i32> {
3333        self.client_id
3334    }
3335}
3336
3337impl TDMessageContent for MessageProximityAlertTriggered {}
3338
3339impl MessageProximityAlertTriggered {
3340    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3341        Ok(serde_json::from_str(json.as_ref())?)
3342    }
3343    pub fn builder() -> MessageProximityAlertTriggeredBuilder {
3344        let mut inner = MessageProximityAlertTriggered::default();
3345        inner.extra = Some(Uuid::new_v4().to_string());
3346
3347        MessageProximityAlertTriggeredBuilder { inner }
3348    }
3349
3350    pub fn traveler_id(&self) -> &MessageSender {
3351        &self.traveler_id
3352    }
3353
3354    pub fn watcher_id(&self) -> &MessageSender {
3355        &self.watcher_id
3356    }
3357
3358    pub fn distance(&self) -> i32 {
3359        self.distance
3360    }
3361}
3362
3363#[doc(hidden)]
3364pub struct MessageProximityAlertTriggeredBuilder {
3365    inner: MessageProximityAlertTriggered,
3366}
3367
3368#[deprecated]
3369pub type RTDMessageProximityAlertTriggeredBuilder = MessageProximityAlertTriggeredBuilder;
3370
3371impl MessageProximityAlertTriggeredBuilder {
3372    pub fn build(&self) -> MessageProximityAlertTriggered {
3373        self.inner.clone()
3374    }
3375
3376    pub fn traveler_id<T: AsRef<MessageSender>>(&mut self, traveler_id: T) -> &mut Self {
3377        self.inner.traveler_id = traveler_id.as_ref().clone();
3378        self
3379    }
3380
3381    pub fn watcher_id<T: AsRef<MessageSender>>(&mut self, watcher_id: T) -> &mut Self {
3382        self.inner.watcher_id = watcher_id.as_ref().clone();
3383        self
3384    }
3385
3386    pub fn distance(&mut self, distance: i32) -> &mut Self {
3387        self.inner.distance = distance;
3388        self
3389    }
3390}
3391
3392impl AsRef<MessageProximityAlertTriggered> for MessageProximityAlertTriggered {
3393    fn as_ref(&self) -> &MessageProximityAlertTriggered {
3394        self
3395    }
3396}
3397
3398impl AsRef<MessageProximityAlertTriggered> for MessageProximityAlertTriggeredBuilder {
3399    fn as_ref(&self) -> &MessageProximityAlertTriggered {
3400        &self.inner
3401    }
3402}
3403
3404/// A screenshot of a message in the chat has been taken
3405#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3406pub struct MessageScreenshotTaken {
3407    #[doc(hidden)]
3408    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3409    extra: Option<String>,
3410    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3411    client_id: Option<i32>,
3412}
3413
3414impl RObject for MessageScreenshotTaken {
3415    #[doc(hidden)]
3416    fn extra(&self) -> Option<&str> {
3417        self.extra.as_deref()
3418    }
3419    #[doc(hidden)]
3420    fn client_id(&self) -> Option<i32> {
3421        self.client_id
3422    }
3423}
3424
3425impl TDMessageContent for MessageScreenshotTaken {}
3426
3427impl MessageScreenshotTaken {
3428    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3429        Ok(serde_json::from_str(json.as_ref())?)
3430    }
3431    pub fn builder() -> MessageScreenshotTakenBuilder {
3432        let mut inner = MessageScreenshotTaken::default();
3433        inner.extra = Some(Uuid::new_v4().to_string());
3434
3435        MessageScreenshotTakenBuilder { inner }
3436    }
3437}
3438
3439#[doc(hidden)]
3440pub struct MessageScreenshotTakenBuilder {
3441    inner: MessageScreenshotTaken,
3442}
3443
3444#[deprecated]
3445pub type RTDMessageScreenshotTakenBuilder = MessageScreenshotTakenBuilder;
3446
3447impl MessageScreenshotTakenBuilder {
3448    pub fn build(&self) -> MessageScreenshotTaken {
3449        self.inner.clone()
3450    }
3451}
3452
3453impl AsRef<MessageScreenshotTaken> for MessageScreenshotTaken {
3454    fn as_ref(&self) -> &MessageScreenshotTaken {
3455        self
3456    }
3457}
3458
3459impl AsRef<MessageScreenshotTaken> for MessageScreenshotTakenBuilder {
3460    fn as_ref(&self) -> &MessageScreenshotTaken {
3461        &self.inner
3462    }
3463}
3464
3465/// A sticker message
3466#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3467pub struct MessageSticker {
3468    #[doc(hidden)]
3469    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3470    extra: Option<String>,
3471    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3472    client_id: Option<i32>,
3473    /// The sticker description
3474    sticker: Sticker,
3475}
3476
3477impl RObject for MessageSticker {
3478    #[doc(hidden)]
3479    fn extra(&self) -> Option<&str> {
3480        self.extra.as_deref()
3481    }
3482    #[doc(hidden)]
3483    fn client_id(&self) -> Option<i32> {
3484        self.client_id
3485    }
3486}
3487
3488impl TDMessageContent for MessageSticker {}
3489
3490impl MessageSticker {
3491    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3492        Ok(serde_json::from_str(json.as_ref())?)
3493    }
3494    pub fn builder() -> MessageStickerBuilder {
3495        let mut inner = MessageSticker::default();
3496        inner.extra = Some(Uuid::new_v4().to_string());
3497
3498        MessageStickerBuilder { inner }
3499    }
3500
3501    pub fn sticker(&self) -> &Sticker {
3502        &self.sticker
3503    }
3504}
3505
3506#[doc(hidden)]
3507pub struct MessageStickerBuilder {
3508    inner: MessageSticker,
3509}
3510
3511#[deprecated]
3512pub type RTDMessageStickerBuilder = MessageStickerBuilder;
3513
3514impl MessageStickerBuilder {
3515    pub fn build(&self) -> MessageSticker {
3516        self.inner.clone()
3517    }
3518
3519    pub fn sticker<T: AsRef<Sticker>>(&mut self, sticker: T) -> &mut Self {
3520        self.inner.sticker = sticker.as_ref().clone();
3521        self
3522    }
3523}
3524
3525impl AsRef<MessageSticker> for MessageSticker {
3526    fn as_ref(&self) -> &MessageSticker {
3527        self
3528    }
3529}
3530
3531impl AsRef<MessageSticker> for MessageStickerBuilder {
3532    fn as_ref(&self) -> &MessageSticker {
3533        &self.inner
3534    }
3535}
3536
3537/// A newly created supergroup or channel
3538#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3539pub struct MessageSupergroupChatCreate {
3540    #[doc(hidden)]
3541    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3542    extra: Option<String>,
3543    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3544    client_id: Option<i32>,
3545    /// Title of the supergroup or channel
3546
3547    #[serde(default)]
3548    title: String,
3549}
3550
3551impl RObject for MessageSupergroupChatCreate {
3552    #[doc(hidden)]
3553    fn extra(&self) -> Option<&str> {
3554        self.extra.as_deref()
3555    }
3556    #[doc(hidden)]
3557    fn client_id(&self) -> Option<i32> {
3558        self.client_id
3559    }
3560}
3561
3562impl TDMessageContent for MessageSupergroupChatCreate {}
3563
3564impl MessageSupergroupChatCreate {
3565    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3566        Ok(serde_json::from_str(json.as_ref())?)
3567    }
3568    pub fn builder() -> MessageSupergroupChatCreateBuilder {
3569        let mut inner = MessageSupergroupChatCreate::default();
3570        inner.extra = Some(Uuid::new_v4().to_string());
3571
3572        MessageSupergroupChatCreateBuilder { inner }
3573    }
3574
3575    pub fn title(&self) -> &String {
3576        &self.title
3577    }
3578}
3579
3580#[doc(hidden)]
3581pub struct MessageSupergroupChatCreateBuilder {
3582    inner: MessageSupergroupChatCreate,
3583}
3584
3585#[deprecated]
3586pub type RTDMessageSupergroupChatCreateBuilder = MessageSupergroupChatCreateBuilder;
3587
3588impl MessageSupergroupChatCreateBuilder {
3589    pub fn build(&self) -> MessageSupergroupChatCreate {
3590        self.inner.clone()
3591    }
3592
3593    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
3594        self.inner.title = title.as_ref().to_string();
3595        self
3596    }
3597}
3598
3599impl AsRef<MessageSupergroupChatCreate> for MessageSupergroupChatCreate {
3600    fn as_ref(&self) -> &MessageSupergroupChatCreate {
3601        self
3602    }
3603}
3604
3605impl AsRef<MessageSupergroupChatCreate> for MessageSupergroupChatCreateBuilder {
3606    fn as_ref(&self) -> &MessageSupergroupChatCreate {
3607        &self.inner
3608    }
3609}
3610
3611/// A text message
3612#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3613pub struct MessageText {
3614    #[doc(hidden)]
3615    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3616    extra: Option<String>,
3617    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3618    client_id: Option<i32>,
3619    /// Text of the message
3620    text: FormattedText,
3621    /// A preview of the web page that's mentioned in the text; may be null
3622    web_page: Option<WebPage>,
3623}
3624
3625impl RObject for MessageText {
3626    #[doc(hidden)]
3627    fn extra(&self) -> Option<&str> {
3628        self.extra.as_deref()
3629    }
3630    #[doc(hidden)]
3631    fn client_id(&self) -> Option<i32> {
3632        self.client_id
3633    }
3634}
3635
3636impl TDMessageContent for MessageText {}
3637
3638impl MessageText {
3639    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3640        Ok(serde_json::from_str(json.as_ref())?)
3641    }
3642    pub fn builder() -> MessageTextBuilder {
3643        let mut inner = MessageText::default();
3644        inner.extra = Some(Uuid::new_v4().to_string());
3645
3646        MessageTextBuilder { inner }
3647    }
3648
3649    pub fn text(&self) -> &FormattedText {
3650        &self.text
3651    }
3652
3653    pub fn web_page(&self) -> &Option<WebPage> {
3654        &self.web_page
3655    }
3656}
3657
3658#[doc(hidden)]
3659pub struct MessageTextBuilder {
3660    inner: MessageText,
3661}
3662
3663#[deprecated]
3664pub type RTDMessageTextBuilder = MessageTextBuilder;
3665
3666impl MessageTextBuilder {
3667    pub fn build(&self) -> MessageText {
3668        self.inner.clone()
3669    }
3670
3671    pub fn text<T: AsRef<FormattedText>>(&mut self, text: T) -> &mut Self {
3672        self.inner.text = text.as_ref().clone();
3673        self
3674    }
3675
3676    pub fn web_page<T: AsRef<WebPage>>(&mut self, web_page: T) -> &mut Self {
3677        self.inner.web_page = Some(web_page.as_ref().clone());
3678        self
3679    }
3680}
3681
3682impl AsRef<MessageText> for MessageText {
3683    fn as_ref(&self) -> &MessageText {
3684        self
3685    }
3686}
3687
3688impl AsRef<MessageText> for MessageTextBuilder {
3689    fn as_ref(&self) -> &MessageText {
3690        &self.inner
3691    }
3692}
3693
3694/// Message content that is not supported in the current TDLib version
3695#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3696pub struct MessageUnsupported {
3697    #[doc(hidden)]
3698    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3699    extra: Option<String>,
3700    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3701    client_id: Option<i32>,
3702}
3703
3704impl RObject for MessageUnsupported {
3705    #[doc(hidden)]
3706    fn extra(&self) -> Option<&str> {
3707        self.extra.as_deref()
3708    }
3709    #[doc(hidden)]
3710    fn client_id(&self) -> Option<i32> {
3711        self.client_id
3712    }
3713}
3714
3715impl TDMessageContent for MessageUnsupported {}
3716
3717impl MessageUnsupported {
3718    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3719        Ok(serde_json::from_str(json.as_ref())?)
3720    }
3721    pub fn builder() -> MessageUnsupportedBuilder {
3722        let mut inner = MessageUnsupported::default();
3723        inner.extra = Some(Uuid::new_v4().to_string());
3724
3725        MessageUnsupportedBuilder { inner }
3726    }
3727}
3728
3729#[doc(hidden)]
3730pub struct MessageUnsupportedBuilder {
3731    inner: MessageUnsupported,
3732}
3733
3734#[deprecated]
3735pub type RTDMessageUnsupportedBuilder = MessageUnsupportedBuilder;
3736
3737impl MessageUnsupportedBuilder {
3738    pub fn build(&self) -> MessageUnsupported {
3739        self.inner.clone()
3740    }
3741}
3742
3743impl AsRef<MessageUnsupported> for MessageUnsupported {
3744    fn as_ref(&self) -> &MessageUnsupported {
3745        self
3746    }
3747}
3748
3749impl AsRef<MessageUnsupported> for MessageUnsupportedBuilder {
3750    fn as_ref(&self) -> &MessageUnsupported {
3751        &self.inner
3752    }
3753}
3754
3755/// A message with information about a venue
3756#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3757pub struct MessageVenue {
3758    #[doc(hidden)]
3759    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3760    extra: Option<String>,
3761    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3762    client_id: Option<i32>,
3763    /// The venue description
3764    venue: Venue,
3765}
3766
3767impl RObject for MessageVenue {
3768    #[doc(hidden)]
3769    fn extra(&self) -> Option<&str> {
3770        self.extra.as_deref()
3771    }
3772    #[doc(hidden)]
3773    fn client_id(&self) -> Option<i32> {
3774        self.client_id
3775    }
3776}
3777
3778impl TDMessageContent for MessageVenue {}
3779
3780impl MessageVenue {
3781    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3782        Ok(serde_json::from_str(json.as_ref())?)
3783    }
3784    pub fn builder() -> MessageVenueBuilder {
3785        let mut inner = MessageVenue::default();
3786        inner.extra = Some(Uuid::new_v4().to_string());
3787
3788        MessageVenueBuilder { inner }
3789    }
3790
3791    pub fn venue(&self) -> &Venue {
3792        &self.venue
3793    }
3794}
3795
3796#[doc(hidden)]
3797pub struct MessageVenueBuilder {
3798    inner: MessageVenue,
3799}
3800
3801#[deprecated]
3802pub type RTDMessageVenueBuilder = MessageVenueBuilder;
3803
3804impl MessageVenueBuilder {
3805    pub fn build(&self) -> MessageVenue {
3806        self.inner.clone()
3807    }
3808
3809    pub fn venue<T: AsRef<Venue>>(&mut self, venue: T) -> &mut Self {
3810        self.inner.venue = venue.as_ref().clone();
3811        self
3812    }
3813}
3814
3815impl AsRef<MessageVenue> for MessageVenue {
3816    fn as_ref(&self) -> &MessageVenue {
3817        self
3818    }
3819}
3820
3821impl AsRef<MessageVenue> for MessageVenueBuilder {
3822    fn as_ref(&self) -> &MessageVenue {
3823        &self.inner
3824    }
3825}
3826
3827/// A video message
3828#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3829pub struct MessageVideo {
3830    #[doc(hidden)]
3831    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3832    extra: Option<String>,
3833    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3834    client_id: Option<i32>,
3835    /// The video description
3836    video: Video,
3837    /// Video caption
3838    caption: FormattedText,
3839    /// True, if the video thumbnail must be blurred and the video must be shown only while tapped
3840
3841    #[serde(default)]
3842    is_secret: bool,
3843}
3844
3845impl RObject for MessageVideo {
3846    #[doc(hidden)]
3847    fn extra(&self) -> Option<&str> {
3848        self.extra.as_deref()
3849    }
3850    #[doc(hidden)]
3851    fn client_id(&self) -> Option<i32> {
3852        self.client_id
3853    }
3854}
3855
3856impl TDMessageContent for MessageVideo {}
3857
3858impl MessageVideo {
3859    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3860        Ok(serde_json::from_str(json.as_ref())?)
3861    }
3862    pub fn builder() -> MessageVideoBuilder {
3863        let mut inner = MessageVideo::default();
3864        inner.extra = Some(Uuid::new_v4().to_string());
3865
3866        MessageVideoBuilder { inner }
3867    }
3868
3869    pub fn video(&self) -> &Video {
3870        &self.video
3871    }
3872
3873    pub fn caption(&self) -> &FormattedText {
3874        &self.caption
3875    }
3876
3877    pub fn is_secret(&self) -> bool {
3878        self.is_secret
3879    }
3880}
3881
3882#[doc(hidden)]
3883pub struct MessageVideoBuilder {
3884    inner: MessageVideo,
3885}
3886
3887#[deprecated]
3888pub type RTDMessageVideoBuilder = MessageVideoBuilder;
3889
3890impl MessageVideoBuilder {
3891    pub fn build(&self) -> MessageVideo {
3892        self.inner.clone()
3893    }
3894
3895    pub fn video<T: AsRef<Video>>(&mut self, video: T) -> &mut Self {
3896        self.inner.video = video.as_ref().clone();
3897        self
3898    }
3899
3900    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
3901        self.inner.caption = caption.as_ref().clone();
3902        self
3903    }
3904
3905    pub fn is_secret(&mut self, is_secret: bool) -> &mut Self {
3906        self.inner.is_secret = is_secret;
3907        self
3908    }
3909}
3910
3911impl AsRef<MessageVideo> for MessageVideo {
3912    fn as_ref(&self) -> &MessageVideo {
3913        self
3914    }
3915}
3916
3917impl AsRef<MessageVideo> for MessageVideoBuilder {
3918    fn as_ref(&self) -> &MessageVideo {
3919        &self.inner
3920    }
3921}
3922
3923/// A message with information about an ended video chat
3924#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3925pub struct MessageVideoChatEnded {
3926    #[doc(hidden)]
3927    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
3928    extra: Option<String>,
3929    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
3930    client_id: Option<i32>,
3931    /// Call duration, in seconds
3932
3933    #[serde(default)]
3934    duration: i32,
3935}
3936
3937impl RObject for MessageVideoChatEnded {
3938    #[doc(hidden)]
3939    fn extra(&self) -> Option<&str> {
3940        self.extra.as_deref()
3941    }
3942    #[doc(hidden)]
3943    fn client_id(&self) -> Option<i32> {
3944        self.client_id
3945    }
3946}
3947
3948impl TDMessageContent for MessageVideoChatEnded {}
3949
3950impl MessageVideoChatEnded {
3951    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
3952        Ok(serde_json::from_str(json.as_ref())?)
3953    }
3954    pub fn builder() -> MessageVideoChatEndedBuilder {
3955        let mut inner = MessageVideoChatEnded::default();
3956        inner.extra = Some(Uuid::new_v4().to_string());
3957
3958        MessageVideoChatEndedBuilder { inner }
3959    }
3960
3961    pub fn duration(&self) -> i32 {
3962        self.duration
3963    }
3964}
3965
3966#[doc(hidden)]
3967pub struct MessageVideoChatEndedBuilder {
3968    inner: MessageVideoChatEnded,
3969}
3970
3971#[deprecated]
3972pub type RTDMessageVideoChatEndedBuilder = MessageVideoChatEndedBuilder;
3973
3974impl MessageVideoChatEndedBuilder {
3975    pub fn build(&self) -> MessageVideoChatEnded {
3976        self.inner.clone()
3977    }
3978
3979    pub fn duration(&mut self, duration: i32) -> &mut Self {
3980        self.inner.duration = duration;
3981        self
3982    }
3983}
3984
3985impl AsRef<MessageVideoChatEnded> for MessageVideoChatEnded {
3986    fn as_ref(&self) -> &MessageVideoChatEnded {
3987        self
3988    }
3989}
3990
3991impl AsRef<MessageVideoChatEnded> for MessageVideoChatEndedBuilder {
3992    fn as_ref(&self) -> &MessageVideoChatEnded {
3993        &self.inner
3994    }
3995}
3996
3997/// A new video chat was scheduled
3998#[derive(Debug, Clone, Default, Serialize, Deserialize)]
3999pub struct MessageVideoChatScheduled {
4000    #[doc(hidden)]
4001    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
4002    extra: Option<String>,
4003    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
4004    client_id: Option<i32>,
4005    /// Identifier of the video chat. The video chat can be received through the method getGroupCall
4006
4007    #[serde(default)]
4008    group_call_id: i32,
4009    /// Point in time (Unix timestamp) when the group call is supposed to be started by an administrator
4010
4011    #[serde(default)]
4012    start_date: i32,
4013}
4014
4015impl RObject for MessageVideoChatScheduled {
4016    #[doc(hidden)]
4017    fn extra(&self) -> Option<&str> {
4018        self.extra.as_deref()
4019    }
4020    #[doc(hidden)]
4021    fn client_id(&self) -> Option<i32> {
4022        self.client_id
4023    }
4024}
4025
4026impl TDMessageContent for MessageVideoChatScheduled {}
4027
4028impl MessageVideoChatScheduled {
4029    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
4030        Ok(serde_json::from_str(json.as_ref())?)
4031    }
4032    pub fn builder() -> MessageVideoChatScheduledBuilder {
4033        let mut inner = MessageVideoChatScheduled::default();
4034        inner.extra = Some(Uuid::new_v4().to_string());
4035
4036        MessageVideoChatScheduledBuilder { inner }
4037    }
4038
4039    pub fn group_call_id(&self) -> i32 {
4040        self.group_call_id
4041    }
4042
4043    pub fn start_date(&self) -> i32 {
4044        self.start_date
4045    }
4046}
4047
4048#[doc(hidden)]
4049pub struct MessageVideoChatScheduledBuilder {
4050    inner: MessageVideoChatScheduled,
4051}
4052
4053#[deprecated]
4054pub type RTDMessageVideoChatScheduledBuilder = MessageVideoChatScheduledBuilder;
4055
4056impl MessageVideoChatScheduledBuilder {
4057    pub fn build(&self) -> MessageVideoChatScheduled {
4058        self.inner.clone()
4059    }
4060
4061    pub fn group_call_id(&mut self, group_call_id: i32) -> &mut Self {
4062        self.inner.group_call_id = group_call_id;
4063        self
4064    }
4065
4066    pub fn start_date(&mut self, start_date: i32) -> &mut Self {
4067        self.inner.start_date = start_date;
4068        self
4069    }
4070}
4071
4072impl AsRef<MessageVideoChatScheduled> for MessageVideoChatScheduled {
4073    fn as_ref(&self) -> &MessageVideoChatScheduled {
4074        self
4075    }
4076}
4077
4078impl AsRef<MessageVideoChatScheduled> for MessageVideoChatScheduledBuilder {
4079    fn as_ref(&self) -> &MessageVideoChatScheduled {
4080        &self.inner
4081    }
4082}
4083
4084/// A newly created video chat
4085#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4086pub struct MessageVideoChatStarted {
4087    #[doc(hidden)]
4088    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
4089    extra: Option<String>,
4090    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
4091    client_id: Option<i32>,
4092    /// Identifier of the video chat. The video chat can be received through the method getGroupCall
4093
4094    #[serde(default)]
4095    group_call_id: i32,
4096}
4097
4098impl RObject for MessageVideoChatStarted {
4099    #[doc(hidden)]
4100    fn extra(&self) -> Option<&str> {
4101        self.extra.as_deref()
4102    }
4103    #[doc(hidden)]
4104    fn client_id(&self) -> Option<i32> {
4105        self.client_id
4106    }
4107}
4108
4109impl TDMessageContent for MessageVideoChatStarted {}
4110
4111impl MessageVideoChatStarted {
4112    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
4113        Ok(serde_json::from_str(json.as_ref())?)
4114    }
4115    pub fn builder() -> MessageVideoChatStartedBuilder {
4116        let mut inner = MessageVideoChatStarted::default();
4117        inner.extra = Some(Uuid::new_v4().to_string());
4118
4119        MessageVideoChatStartedBuilder { inner }
4120    }
4121
4122    pub fn group_call_id(&self) -> i32 {
4123        self.group_call_id
4124    }
4125}
4126
4127#[doc(hidden)]
4128pub struct MessageVideoChatStartedBuilder {
4129    inner: MessageVideoChatStarted,
4130}
4131
4132#[deprecated]
4133pub type RTDMessageVideoChatStartedBuilder = MessageVideoChatStartedBuilder;
4134
4135impl MessageVideoChatStartedBuilder {
4136    pub fn build(&self) -> MessageVideoChatStarted {
4137        self.inner.clone()
4138    }
4139
4140    pub fn group_call_id(&mut self, group_call_id: i32) -> &mut Self {
4141        self.inner.group_call_id = group_call_id;
4142        self
4143    }
4144}
4145
4146impl AsRef<MessageVideoChatStarted> for MessageVideoChatStarted {
4147    fn as_ref(&self) -> &MessageVideoChatStarted {
4148        self
4149    }
4150}
4151
4152impl AsRef<MessageVideoChatStarted> for MessageVideoChatStartedBuilder {
4153    fn as_ref(&self) -> &MessageVideoChatStarted {
4154        &self.inner
4155    }
4156}
4157
4158/// A video note message
4159#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4160pub struct MessageVideoNote {
4161    #[doc(hidden)]
4162    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
4163    extra: Option<String>,
4164    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
4165    client_id: Option<i32>,
4166    /// The video note description
4167    video_note: VideoNote,
4168    /// True, if at least one of the recipients has viewed the video note
4169
4170    #[serde(default)]
4171    is_viewed: bool,
4172    /// True, if the video note thumbnail must be blurred and the video note must be shown only while tapped
4173
4174    #[serde(default)]
4175    is_secret: bool,
4176}
4177
4178impl RObject for MessageVideoNote {
4179    #[doc(hidden)]
4180    fn extra(&self) -> Option<&str> {
4181        self.extra.as_deref()
4182    }
4183    #[doc(hidden)]
4184    fn client_id(&self) -> Option<i32> {
4185        self.client_id
4186    }
4187}
4188
4189impl TDMessageContent for MessageVideoNote {}
4190
4191impl MessageVideoNote {
4192    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
4193        Ok(serde_json::from_str(json.as_ref())?)
4194    }
4195    pub fn builder() -> MessageVideoNoteBuilder {
4196        let mut inner = MessageVideoNote::default();
4197        inner.extra = Some(Uuid::new_v4().to_string());
4198
4199        MessageVideoNoteBuilder { inner }
4200    }
4201
4202    pub fn video_note(&self) -> &VideoNote {
4203        &self.video_note
4204    }
4205
4206    pub fn is_viewed(&self) -> bool {
4207        self.is_viewed
4208    }
4209
4210    pub fn is_secret(&self) -> bool {
4211        self.is_secret
4212    }
4213}
4214
4215#[doc(hidden)]
4216pub struct MessageVideoNoteBuilder {
4217    inner: MessageVideoNote,
4218}
4219
4220#[deprecated]
4221pub type RTDMessageVideoNoteBuilder = MessageVideoNoteBuilder;
4222
4223impl MessageVideoNoteBuilder {
4224    pub fn build(&self) -> MessageVideoNote {
4225        self.inner.clone()
4226    }
4227
4228    pub fn video_note<T: AsRef<VideoNote>>(&mut self, video_note: T) -> &mut Self {
4229        self.inner.video_note = video_note.as_ref().clone();
4230        self
4231    }
4232
4233    pub fn is_viewed(&mut self, is_viewed: bool) -> &mut Self {
4234        self.inner.is_viewed = is_viewed;
4235        self
4236    }
4237
4238    pub fn is_secret(&mut self, is_secret: bool) -> &mut Self {
4239        self.inner.is_secret = is_secret;
4240        self
4241    }
4242}
4243
4244impl AsRef<MessageVideoNote> for MessageVideoNote {
4245    fn as_ref(&self) -> &MessageVideoNote {
4246        self
4247    }
4248}
4249
4250impl AsRef<MessageVideoNote> for MessageVideoNoteBuilder {
4251    fn as_ref(&self) -> &MessageVideoNote {
4252        &self.inner
4253    }
4254}
4255
4256/// A voice note message
4257#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4258pub struct MessageVoiceNote {
4259    #[doc(hidden)]
4260    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
4261    extra: Option<String>,
4262    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
4263    client_id: Option<i32>,
4264    /// The voice note description
4265    voice_note: VoiceNote,
4266    /// Voice note caption
4267    caption: FormattedText,
4268    /// True, if at least one of the recipients has listened to the voice note
4269
4270    #[serde(default)]
4271    is_listened: bool,
4272}
4273
4274impl RObject for MessageVoiceNote {
4275    #[doc(hidden)]
4276    fn extra(&self) -> Option<&str> {
4277        self.extra.as_deref()
4278    }
4279    #[doc(hidden)]
4280    fn client_id(&self) -> Option<i32> {
4281        self.client_id
4282    }
4283}
4284
4285impl TDMessageContent for MessageVoiceNote {}
4286
4287impl MessageVoiceNote {
4288    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
4289        Ok(serde_json::from_str(json.as_ref())?)
4290    }
4291    pub fn builder() -> MessageVoiceNoteBuilder {
4292        let mut inner = MessageVoiceNote::default();
4293        inner.extra = Some(Uuid::new_v4().to_string());
4294
4295        MessageVoiceNoteBuilder { inner }
4296    }
4297
4298    pub fn voice_note(&self) -> &VoiceNote {
4299        &self.voice_note
4300    }
4301
4302    pub fn caption(&self) -> &FormattedText {
4303        &self.caption
4304    }
4305
4306    pub fn is_listened(&self) -> bool {
4307        self.is_listened
4308    }
4309}
4310
4311#[doc(hidden)]
4312pub struct MessageVoiceNoteBuilder {
4313    inner: MessageVoiceNote,
4314}
4315
4316#[deprecated]
4317pub type RTDMessageVoiceNoteBuilder = MessageVoiceNoteBuilder;
4318
4319impl MessageVoiceNoteBuilder {
4320    pub fn build(&self) -> MessageVoiceNote {
4321        self.inner.clone()
4322    }
4323
4324    pub fn voice_note<T: AsRef<VoiceNote>>(&mut self, voice_note: T) -> &mut Self {
4325        self.inner.voice_note = voice_note.as_ref().clone();
4326        self
4327    }
4328
4329    pub fn caption<T: AsRef<FormattedText>>(&mut self, caption: T) -> &mut Self {
4330        self.inner.caption = caption.as_ref().clone();
4331        self
4332    }
4333
4334    pub fn is_listened(&mut self, is_listened: bool) -> &mut Self {
4335        self.inner.is_listened = is_listened;
4336        self
4337    }
4338}
4339
4340impl AsRef<MessageVoiceNote> for MessageVoiceNote {
4341    fn as_ref(&self) -> &MessageVoiceNote {
4342        self
4343    }
4344}
4345
4346impl AsRef<MessageVoiceNote> for MessageVoiceNoteBuilder {
4347    fn as_ref(&self) -> &MessageVoiceNote {
4348        &self.inner
4349    }
4350}
4351
4352/// The current user has connected a website by logging in using Telegram Login Widget on it
4353#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4354pub struct MessageWebsiteConnected {
4355    #[doc(hidden)]
4356    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
4357    extra: Option<String>,
4358    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
4359    client_id: Option<i32>,
4360    /// Domain name of the connected website
4361
4362    #[serde(default)]
4363    domain_name: String,
4364}
4365
4366impl RObject for MessageWebsiteConnected {
4367    #[doc(hidden)]
4368    fn extra(&self) -> Option<&str> {
4369        self.extra.as_deref()
4370    }
4371    #[doc(hidden)]
4372    fn client_id(&self) -> Option<i32> {
4373        self.client_id
4374    }
4375}
4376
4377impl TDMessageContent for MessageWebsiteConnected {}
4378
4379impl MessageWebsiteConnected {
4380    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
4381        Ok(serde_json::from_str(json.as_ref())?)
4382    }
4383    pub fn builder() -> MessageWebsiteConnectedBuilder {
4384        let mut inner = MessageWebsiteConnected::default();
4385        inner.extra = Some(Uuid::new_v4().to_string());
4386
4387        MessageWebsiteConnectedBuilder { inner }
4388    }
4389
4390    pub fn domain_name(&self) -> &String {
4391        &self.domain_name
4392    }
4393}
4394
4395#[doc(hidden)]
4396pub struct MessageWebsiteConnectedBuilder {
4397    inner: MessageWebsiteConnected,
4398}
4399
4400#[deprecated]
4401pub type RTDMessageWebsiteConnectedBuilder = MessageWebsiteConnectedBuilder;
4402
4403impl MessageWebsiteConnectedBuilder {
4404    pub fn build(&self) -> MessageWebsiteConnected {
4405        self.inner.clone()
4406    }
4407
4408    pub fn domain_name<T: AsRef<str>>(&mut self, domain_name: T) -> &mut Self {
4409        self.inner.domain_name = domain_name.as_ref().to_string();
4410        self
4411    }
4412}
4413
4414impl AsRef<MessageWebsiteConnected> for MessageWebsiteConnected {
4415    fn as_ref(&self) -> &MessageWebsiteConnected {
4416        self
4417    }
4418}
4419
4420impl AsRef<MessageWebsiteConnected> for MessageWebsiteConnectedBuilder {
4421    fn as_ref(&self) -> &MessageWebsiteConnected {
4422        &self.inner
4423    }
4424}