use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use crate::types::{
Animation,
Audio,
ChatBackground,
Checklist,
ChecklistTasksAdded,
ChecklistTasksDone,
CommunityChatAdded,
CommunityChatRemoved,
Contact,
Dice,
Document,
ForumTopicIconColor,
Game,
GiftInfo,
Giveaway,
GiveawayCompleted,
GiveawayCreated,
GiveawayWinners,
Integer,
Invoice,
LivePhoto,
Location,
MaybeInaccessibleMessage,
PaidMediaInfo,
PassportData,
PhotoSize,
Poll,
RefundedPayment,
RichMessage,
SharedUser,
Sticker,
Story,
SuccessfulPayment,
SuggestedPostApprovalFailed,
SuggestedPostApproved,
SuggestedPostDeclined,
SuggestedPostPaid,
SuggestedPostRefunded,
Text,
TextEntities,
True,
UniqueGiftInfo,
User,
Venue,
Video,
VideoNote,
Voice,
WebAppData,
};
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(from = "RawMessageData", into = "RawMessageData")]
pub enum MessageData {
Animation(Animation),
AutoDeleteTimerChanged(MessageDataAutoDeleteTimer),
BoostAdded(Integer),
ChannelChatCreated,
ChatBackgroundSet(ChatBackground),
ChatOwnerChanged(User),
ChatOwnerLeft(Option<User>),
ChatShared(MessageDataChatShared),
Checklist(Checklist),
ChecklistTasksAdded(ChecklistTasksAdded),
ChecklistTasksDone(ChecklistTasksDone),
CommunityChatAdded(CommunityChatAdded),
CommunityChatRemoved(CommunityChatRemoved),
ConnectedWebsite(String),
Contact(Contact),
DeleteChatPhoto,
Dice(Dice),
DirectMessagePriceChanged(MessageDataDirectMessagePriceChanged),
ForumTopicClosed,
ForumTopicCreated(MessageDataForumTopicCreated),
ForumTopicEdited(MessageDataForumTopicEdited),
ForumTopicReopened,
Game(Game),
Gift(GiftInfo),
GiftUpgradeSent(GiftInfo),
GeneralForumTopicHidden,
GeneralForumTopicUnhidden,
Giveaway(Giveaway),
GiveawayCreated(GiveawayCreated),
GiveawayCompleted(GiveawayCompleted),
GiveawayWinners(GiveawayWinners),
GroupChatCreated,
Invoice(Invoice),
LivePhoto(LivePhoto),
LeftChatMember(User),
Location(Location),
ManagedBotCreated(MessageDataManagedBotCreated),
MigrateFromChatId(Integer),
MigrateToChatId(Integer),
NewChatMembers(Vec<User>),
NewChatPhoto(Vec<PhotoSize>),
NewChatTitle(String),
PaidMedia(PaidMediaInfo),
PaidMessagePriceChanged(MessageDataPaidMessagePriceChanged),
PassportData(PassportData),
PinnedMessage(MaybeInaccessibleMessage),
Poll(Poll),
PollOptionAdded(MessageDataPollOptionAdded),
PollOptionDeleted(MessageDataPollOptionDeleted),
ProximityAlertTriggered(MessageDataProximityAlert),
RefundedPayment(RefundedPayment),
RichMessage(RichMessage),
Sticker(Sticker),
Story(Story),
SuggestedPostApproved(SuggestedPostApproved),
SuggestedPostApprovalFailed(SuggestedPostApprovalFailed),
SuggestedPostDeclined(SuggestedPostDeclined),
SuggestedPostPaid(SuggestedPostPaid),
SuggestedPostRefunded(SuggestedPostRefunded),
SuccessfulPayment(SuccessfulPayment),
SupergroupChatCreated,
UniqueGift(Box<UniqueGiftInfo>),
UsersShared(MessageDataUsersShared),
Venue(Venue),
VideoNote(VideoNote),
VideoChatEnded(MessageDataVideoChatEnded),
VideoChatParticipantsInvited(MessageDataVideoChatParticipantsInvited),
VideoChatScheduled(MessageDataVideoChatScheduled),
VideoChatStarted,
WebAppData(WebAppData),
WriteAccessAllowed(MessageDataWriteAccess),
Audio(MessageDataAudio),
Document(MessageDataDocument),
Photo(MessageDataPhoto),
Text(Text),
Video(MessageDataVideo),
Voice(MessageDataVoice),
Unknown(JsonValue),
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct MessageDataAutoDeleteTimer {
#[serde(rename = "message_auto_delete_time")]
pub time: Integer,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MessageDataAudio {
pub data: Audio,
pub caption: Option<Text>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataChatShared {
pub chat_id: Integer,
pub request_id: Integer,
pub photo: Option<Vec<PhotoSize>>,
pub title: Option<String>,
pub username: Option<String>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MessageDataDocument {
pub data: Document,
pub caption: Option<Text>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataForumTopicCreated {
pub icon_color: ForumTopicIconColor,
pub name: String,
pub icon_custom_emoji_id: Option<String>,
pub is_name_implicit: Option<bool>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataForumTopicEdited {
pub name: Option<String>,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataManagedBotCreated {
pub user: User,
}
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataPaidMessagePriceChanged {
pub paid_message_star_count: Integer,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Copy, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataDirectMessagePriceChanged {
pub are_direct_messages_enabled: bool,
pub direct_message_star_count: Option<Integer>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MessageDataPhoto {
pub data: Vec<PhotoSize>,
pub caption: Option<Text>,
}
#[derive(Clone, Debug)]
pub struct MessageDataPollOptionAdded {
pub option_persistent_id: String,
pub option: Text,
pub poll_message: Option<MaybeInaccessibleMessage>,
}
#[derive(Clone, Debug)]
pub struct MessageDataPollOptionDeleted {
pub option_persistent_id: String,
pub option: Text,
pub poll_message: Option<MaybeInaccessibleMessage>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataProximityAlert {
pub distance: Integer,
pub traveler: User,
pub watcher: User,
}
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataUsersShared {
pub request_id: Integer,
pub users: Vec<SharedUser>,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MessageDataVideo {
pub data: Video,
pub caption: Option<Text>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct MessageDataVideoChatEnded {
pub duration: Integer,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub struct MessageDataVideoChatParticipantsInvited {
pub users: Option<Vec<User>>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct MessageDataVideoChatScheduled {
pub start_date: Integer,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MessageDataVoice {
pub data: Voice,
pub caption: Option<Text>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct MessageDataWriteAccess {
pub from_attachment_menu: Option<bool>,
pub from_request: Option<bool>,
pub web_app_name: Option<String>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
enum RawMessageData {
Animation(Animation),
#[serde(rename = "message_auto_delete_timer_changed")]
AutoDeleteTimerChanged(MessageDataAutoDeleteTimer),
BoostAdded {
boost_count: Integer,
},
ChannelChatCreated(True),
ChatBackgroundSet(ChatBackground),
ChatOwnerChanged {
new_owner: User,
},
ChatOwnerLeft {
new_owner: Option<User>,
},
ChatShared(MessageDataChatShared),
Checklist(Checklist),
ChecklistTasksAdded(ChecklistTasksAdded),
ChecklistTasksDone(ChecklistTasksDone),
CommunityChatAdded(CommunityChatAdded),
CommunityChatRemoved(CommunityChatRemoved),
ConnectedWebsite(String),
Contact(Contact),
DeleteChatPhoto(True),
Dice(Dice),
DirectMessagePriceChanged(MessageDataDirectMessagePriceChanged),
ForumTopicClosed {},
ForumTopicCreated(MessageDataForumTopicCreated),
ForumTopicEdited(MessageDataForumTopicEdited),
ForumTopicReopened {},
Game(Game),
Gift(GiftInfo),
GiftUpgradeSent(GiftInfo),
GeneralForumTopicHidden {},
GeneralForumTopicUnhidden {},
Giveaway(Giveaway),
GiveawayCreated(GiveawayCreated),
GiveawayCompleted(GiveawayCompleted),
GiveawayWinners(GiveawayWinners),
GroupChatCreated(True),
Invoice(Invoice),
LeftChatMember(User),
Location(Location),
ManagedBotCreated(MessageDataManagedBotCreated),
MigrateFromChatId(Integer),
MigrateToChatId(Integer),
NewChatMembers(Vec<User>),
NewChatPhoto(Vec<PhotoSize>),
NewChatTitle(String),
PaidMedia(PaidMediaInfo),
PaidMessagePriceChanged(MessageDataPaidMessagePriceChanged),
PassportData(PassportData),
PinnedMessage(MaybeInaccessibleMessage),
Poll(Poll),
PollOptionAdded {
option_persistent_id: String,
option_text: String,
option_text_entities: Option<TextEntities>,
poll_message: Option<MaybeInaccessibleMessage>,
},
PollOptionDeleted {
option_persistent_id: String,
option_text: String,
option_text_entities: Option<TextEntities>,
poll_message: Option<MaybeInaccessibleMessage>,
},
ProximityAlertTriggered(MessageDataProximityAlert),
RefundedPayment(RefundedPayment),
RichMessage(RichMessage),
Sticker(Sticker),
Story(Story),
SuggestedPostApproved(SuggestedPostApproved),
SuggestedPostApprovalFailed(SuggestedPostApprovalFailed),
SuggestedPostDeclined(SuggestedPostDeclined),
SuggestedPostPaid(SuggestedPostPaid),
SuggestedPostRefunded(SuggestedPostRefunded),
SuccessfulPayment(SuccessfulPayment),
SupergroupChatCreated(True),
UniqueGift(Box<UniqueGiftInfo>),
UsersShared(MessageDataUsersShared),
Venue(Venue),
VideoNote(VideoNote),
VideoChatEnded(MessageDataVideoChatEnded),
VideoChatParticipantsInvited(MessageDataVideoChatParticipantsInvited),
VideoChatScheduled(MessageDataVideoChatScheduled),
VideoChatStarted {},
WebAppData(WebAppData),
WriteAccessAllowed(MessageDataWriteAccess),
#[serde(untagged)]
Audio {
audio: Audio,
caption: Option<String>,
caption_entities: Option<TextEntities>,
},
#[serde(untagged)]
Document {
document: Document,
caption: Option<String>,
caption_entities: Option<TextEntities>,
},
#[serde(untagged)]
LivePhoto {
live_photo: LivePhoto,
},
#[serde(untagged)]
Photo {
photo: Vec<PhotoSize>,
caption: Option<String>,
caption_entities: Option<TextEntities>,
},
#[serde(untagged)]
Text {
text: String,
entities: Option<TextEntities>,
},
#[serde(untagged)]
Video {
video: Video,
caption: Option<String>,
caption_entities: Option<TextEntities>,
},
#[serde(untagged)]
Voice {
voice: Voice,
caption: Option<String>,
caption_entities: Option<TextEntities>,
},
#[serde(untagged)]
Unknown(JsonValue),
}
impl From<RawMessageData> for MessageData {
fn from(value: RawMessageData) -> Self {
match value {
RawMessageData::Animation(value) => Self::Animation(value),
RawMessageData::AutoDeleteTimerChanged(value) => Self::AutoDeleteTimerChanged(value),
RawMessageData::BoostAdded { boost_count } => Self::BoostAdded(boost_count),
RawMessageData::ChannelChatCreated(True) => Self::ChannelChatCreated,
RawMessageData::ChatBackgroundSet(value) => Self::ChatBackgroundSet(value),
RawMessageData::ChatOwnerChanged { new_owner } => Self::ChatOwnerChanged(new_owner),
RawMessageData::ChatOwnerLeft { new_owner } => Self::ChatOwnerLeft(new_owner),
RawMessageData::ChatShared(value) => Self::ChatShared(value),
RawMessageData::Checklist(value) => Self::Checklist(value),
RawMessageData::ChecklistTasksAdded(value) => Self::ChecklistTasksAdded(value),
RawMessageData::ChecklistTasksDone(value) => Self::ChecklistTasksDone(value),
RawMessageData::CommunityChatAdded(value) => Self::CommunityChatAdded(value),
RawMessageData::CommunityChatRemoved(value) => Self::CommunityChatRemoved(value),
RawMessageData::ConnectedWebsite(value) => Self::ConnectedWebsite(value),
RawMessageData::Contact(value) => Self::Contact(value),
RawMessageData::DeleteChatPhoto(True) => Self::DeleteChatPhoto,
RawMessageData::Dice(value) => Self::Dice(value),
RawMessageData::DirectMessagePriceChanged(value) => Self::DirectMessagePriceChanged(value),
RawMessageData::ForumTopicClosed {} => Self::ForumTopicClosed,
RawMessageData::ForumTopicCreated(value) => Self::ForumTopicCreated(value),
RawMessageData::ForumTopicEdited(value) => Self::ForumTopicEdited(value),
RawMessageData::ForumTopicReopened {} => Self::ForumTopicReopened,
RawMessageData::Game(value) => Self::Game(value),
RawMessageData::Gift(value) => Self::Gift(value),
RawMessageData::GiftUpgradeSent(value) => Self::GiftUpgradeSent(value),
RawMessageData::GeneralForumTopicHidden {} => Self::GeneralForumTopicHidden,
RawMessageData::GeneralForumTopicUnhidden {} => Self::GeneralForumTopicUnhidden,
RawMessageData::Giveaway(value) => Self::Giveaway(value),
RawMessageData::GiveawayCreated(value) => Self::GiveawayCreated(value),
RawMessageData::GiveawayCompleted(value) => Self::GiveawayCompleted(value),
RawMessageData::GiveawayWinners(value) => Self::GiveawayWinners(value),
RawMessageData::GroupChatCreated(True) => Self::GroupChatCreated,
RawMessageData::Invoice(value) => Self::Invoice(value),
RawMessageData::LeftChatMember(value) => Self::LeftChatMember(value),
RawMessageData::Location(value) => Self::Location(value),
RawMessageData::ManagedBotCreated(value) => Self::ManagedBotCreated(value),
RawMessageData::MigrateFromChatId(value) => Self::MigrateFromChatId(value),
RawMessageData::MigrateToChatId(value) => Self::MigrateToChatId(value),
RawMessageData::NewChatMembers(value) => Self::NewChatMembers(value),
RawMessageData::NewChatPhoto(value) => Self::NewChatPhoto(value),
RawMessageData::NewChatTitle(value) => Self::NewChatTitle(value),
RawMessageData::PaidMedia(value) => Self::PaidMedia(value),
RawMessageData::PaidMessagePriceChanged(value) => Self::PaidMessagePriceChanged(value),
RawMessageData::PassportData(value) => Self::PassportData(value),
RawMessageData::PinnedMessage(value) => Self::PinnedMessage(value),
RawMessageData::Poll(value) => Self::Poll(value),
RawMessageData::PollOptionAdded {
option_persistent_id,
option_text,
option_text_entities,
poll_message,
} => Self::PollOptionAdded(MessageDataPollOptionAdded {
option_persistent_id,
option: Text {
data: option_text,
entities: option_text_entities,
},
poll_message,
}),
RawMessageData::PollOptionDeleted {
option_persistent_id,
option_text,
option_text_entities,
poll_message,
} => Self::PollOptionDeleted(MessageDataPollOptionDeleted {
option_persistent_id,
option: Text {
data: option_text,
entities: option_text_entities,
},
poll_message,
}),
RawMessageData::ProximityAlertTriggered(value) => Self::ProximityAlertTriggered(value),
RawMessageData::RefundedPayment(value) => Self::RefundedPayment(value),
RawMessageData::RichMessage(value) => Self::RichMessage(value),
RawMessageData::Sticker(value) => Self::Sticker(value),
RawMessageData::Story(value) => Self::Story(value),
RawMessageData::SuggestedPostApproved(value) => Self::SuggestedPostApproved(value),
RawMessageData::SuggestedPostApprovalFailed(value) => Self::SuggestedPostApprovalFailed(value),
RawMessageData::SuggestedPostDeclined(value) => Self::SuggestedPostDeclined(value),
RawMessageData::SuggestedPostPaid(value) => Self::SuggestedPostPaid(value),
RawMessageData::SuggestedPostRefunded(value) => Self::SuggestedPostRefunded(value),
RawMessageData::SuccessfulPayment(value) => Self::SuccessfulPayment(value),
RawMessageData::SupergroupChatCreated(True) => Self::SupergroupChatCreated,
RawMessageData::UniqueGift(value) => Self::UniqueGift(value),
RawMessageData::UsersShared(value) => Self::UsersShared(value),
RawMessageData::Venue(value) => Self::Venue(value),
RawMessageData::VideoNote(value) => Self::VideoNote(value),
RawMessageData::VideoChatEnded(value) => Self::VideoChatEnded(value),
RawMessageData::VideoChatParticipantsInvited(value) => Self::VideoChatParticipantsInvited(value),
RawMessageData::VideoChatScheduled(value) => Self::VideoChatScheduled(value),
RawMessageData::VideoChatStarted {} => Self::VideoChatStarted,
RawMessageData::WebAppData(value) => Self::WebAppData(value),
RawMessageData::WriteAccessAllowed(value) => Self::WriteAccessAllowed(value),
RawMessageData::Audio {
audio,
caption,
caption_entities,
} => Self::Audio(MessageDataAudio {
data: audio,
caption: caption.map(|data| Text {
data,
entities: caption_entities,
}),
}),
RawMessageData::Document {
document,
caption,
caption_entities,
} => Self::Document(MessageDataDocument {
data: document,
caption: caption.map(|data| Text {
data,
entities: caption_entities,
}),
}),
RawMessageData::LivePhoto { live_photo } => Self::LivePhoto(live_photo),
RawMessageData::Photo {
photo,
caption,
caption_entities,
} => Self::Photo(MessageDataPhoto {
data: photo,
caption: caption.map(|data| Text {
data,
entities: caption_entities,
}),
}),
RawMessageData::Text { text: data, entities } => Self::Text(Text { data, entities }),
RawMessageData::Video {
video,
caption,
caption_entities,
} => Self::Video(MessageDataVideo {
data: video,
caption: caption.map(|data| Text {
data,
entities: caption_entities,
}),
}),
RawMessageData::Voice {
voice,
caption,
caption_entities,
} => Self::Voice(MessageDataVoice {
data: voice,
caption: caption.map(|data| Text {
data,
entities: caption_entities,
}),
}),
RawMessageData::Unknown(value) => Self::Unknown(value),
}
}
}
impl From<MessageData> for RawMessageData {
fn from(value: MessageData) -> Self {
match value {
MessageData::Animation(value) => Self::Animation(value),
MessageData::AutoDeleteTimerChanged(value) => Self::AutoDeleteTimerChanged(value),
MessageData::BoostAdded(boost_count) => Self::BoostAdded { boost_count },
MessageData::ChannelChatCreated => Self::ChannelChatCreated(True),
MessageData::ChatBackgroundSet(value) => Self::ChatBackgroundSet(value),
MessageData::ChatOwnerChanged(new_owner) => Self::ChatOwnerChanged { new_owner },
MessageData::ChatOwnerLeft(new_owner) => Self::ChatOwnerLeft { new_owner },
MessageData::ChatShared(value) => Self::ChatShared(value),
MessageData::Checklist(value) => Self::Checklist(value),
MessageData::ChecklistTasksAdded(value) => Self::ChecklistTasksAdded(value),
MessageData::ChecklistTasksDone(value) => Self::ChecklistTasksDone(value),
MessageData::CommunityChatAdded(value) => Self::CommunityChatAdded(value),
MessageData::CommunityChatRemoved(value) => Self::CommunityChatRemoved(value),
MessageData::ConnectedWebsite(value) => Self::ConnectedWebsite(value),
MessageData::Contact(value) => Self::Contact(value),
MessageData::DeleteChatPhoto => Self::DeleteChatPhoto(True),
MessageData::Dice(value) => Self::Dice(value),
MessageData::DirectMessagePriceChanged(value) => Self::DirectMessagePriceChanged(value),
MessageData::ForumTopicClosed => Self::ForumTopicClosed {},
MessageData::ForumTopicCreated(value) => Self::ForumTopicCreated(value),
MessageData::ForumTopicEdited(value) => Self::ForumTopicEdited(value),
MessageData::ForumTopicReopened => Self::ForumTopicReopened {},
MessageData::Game(value) => Self::Game(value),
MessageData::Gift(value) => Self::Gift(value),
MessageData::GiftUpgradeSent(value) => Self::GiftUpgradeSent(value),
MessageData::GeneralForumTopicHidden => Self::GeneralForumTopicHidden {},
MessageData::GeneralForumTopicUnhidden => Self::GeneralForumTopicUnhidden {},
MessageData::Giveaway(value) => Self::Giveaway(value),
MessageData::GiveawayCreated(value) => Self::GiveawayCreated(value),
MessageData::GiveawayCompleted(value) => Self::GiveawayCompleted(value),
MessageData::GiveawayWinners(value) => Self::GiveawayWinners(value),
MessageData::GroupChatCreated => Self::GroupChatCreated(True),
MessageData::Invoice(value) => Self::Invoice(value),
MessageData::LeftChatMember(value) => Self::LeftChatMember(value),
MessageData::Location(value) => Self::Location(value),
MessageData::ManagedBotCreated(value) => Self::ManagedBotCreated(value),
MessageData::MigrateFromChatId(value) => Self::MigrateFromChatId(value),
MessageData::MigrateToChatId(value) => Self::MigrateToChatId(value),
MessageData::NewChatMembers(value) => Self::NewChatMembers(value),
MessageData::NewChatPhoto(value) => Self::NewChatPhoto(value),
MessageData::NewChatTitle(value) => Self::NewChatTitle(value),
MessageData::PaidMedia(value) => Self::PaidMedia(value),
MessageData::PaidMessagePriceChanged(value) => Self::PaidMessagePriceChanged(value),
MessageData::PassportData(value) => Self::PassportData(value),
MessageData::PinnedMessage(value) => Self::PinnedMessage(value),
MessageData::Poll(value) => Self::Poll(value),
MessageData::PollOptionAdded(MessageDataPollOptionAdded {
option_persistent_id,
option,
poll_message,
}) => Self::PollOptionAdded {
option_persistent_id,
option_text: option.data,
option_text_entities: option.entities,
poll_message,
},
MessageData::PollOptionDeleted(MessageDataPollOptionDeleted {
option_persistent_id,
option,
poll_message,
}) => Self::PollOptionDeleted {
option_persistent_id,
option_text: option.data,
option_text_entities: option.entities,
poll_message,
},
MessageData::ProximityAlertTriggered(value) => Self::ProximityAlertTriggered(value),
MessageData::RefundedPayment(value) => Self::RefundedPayment(value),
MessageData::RichMessage(value) => Self::RichMessage(value),
MessageData::Sticker(value) => Self::Sticker(value),
MessageData::Story(value) => Self::Story(value),
MessageData::SuggestedPostApproved(value) => Self::SuggestedPostApproved(value),
MessageData::SuggestedPostApprovalFailed(value) => Self::SuggestedPostApprovalFailed(value),
MessageData::SuggestedPostDeclined(value) => Self::SuggestedPostDeclined(value),
MessageData::SuggestedPostPaid(value) => Self::SuggestedPostPaid(value),
MessageData::SuggestedPostRefunded(value) => Self::SuggestedPostRefunded(value),
MessageData::SuccessfulPayment(value) => Self::SuccessfulPayment(value),
MessageData::SupergroupChatCreated => Self::SupergroupChatCreated(True),
MessageData::UniqueGift(value) => Self::UniqueGift(value),
MessageData::UsersShared(value) => Self::UsersShared(value),
MessageData::Venue(value) => Self::Venue(value),
MessageData::VideoNote(value) => Self::VideoNote(value),
MessageData::VideoChatEnded(value) => Self::VideoChatEnded(value),
MessageData::VideoChatParticipantsInvited(value) => Self::VideoChatParticipantsInvited(value),
MessageData::VideoChatScheduled(value) => Self::VideoChatScheduled(value),
MessageData::VideoChatStarted => Self::VideoChatStarted {},
MessageData::WebAppData(value) => Self::WebAppData(value),
MessageData::WriteAccessAllowed(value) => Self::WriteAccessAllowed(value),
MessageData::Audio(value) => {
let audio = value.data;
let (caption, caption_entities) = value
.caption
.map(|x| (Some(x.data), x.entities))
.unwrap_or((None, None));
Self::Audio {
audio,
caption,
caption_entities,
}
}
MessageData::Document(value) => {
let document = value.data;
let (caption, caption_entities) = value
.caption
.map(|x| (Some(x.data), x.entities))
.unwrap_or((None, None));
Self::Document {
document,
caption,
caption_entities,
}
}
MessageData::LivePhoto(live_photo) => Self::LivePhoto { live_photo },
MessageData::Photo(value) => {
let photo = value.data;
let (caption, caption_entities) = value
.caption
.map(|x| (Some(x.data), x.entities))
.unwrap_or((None, None));
Self::Photo {
photo,
caption,
caption_entities,
}
}
MessageData::Text(Text { data: text, entities }) => Self::Text { text, entities },
MessageData::Video(value) => {
let video = value.data;
let (caption, caption_entities) = value
.caption
.map(|x| (Some(x.data), x.entities))
.unwrap_or((None, None));
Self::Video {
video,
caption,
caption_entities,
}
}
MessageData::Voice(value) => {
let voice = value.data;
let (caption, caption_entities) = value
.caption
.map(|x| (Some(x.data), x.entities))
.unwrap_or((None, None));
Self::Voice {
voice,
caption,
caption_entities,
}
}
MessageData::Unknown(value) => Self::Unknown(value),
}
}
}