use super::{
Audio, Chat, Contact, Document, Game, Invoice, Location, MessageEntity, PhotoSize, Sticker,
SuccessfulPayment, User, Venue, Video, VideoNote, Voice,
};
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct Message {
pub message_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<User>,
pub date: i64,
pub chat: Chat,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_from: Option<User>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_from_chat: Option<Chat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_from_message_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_to_message: Option<Box<Message>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub edit_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_group_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<Audio>,
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<Document>,
#[serde(skip_serializing_if = "Option::is_none")]
pub game: Option<Game>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo: Option<Vec<PhotoSize>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sticker: Option<Sticker>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video: Option<Video>,
#[serde(skip_serializing_if = "Option::is_none")]
pub voice: Option<Voice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vide_note: Option<VideoNote>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contact: Option<Contact>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Location>,
#[serde(skip_serializing_if = "Option::is_none")]
pub venue: Option<Venue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_chat_members: Option<Vec<User>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub left_chat_member: Option<User>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_chat_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_chat_photo: Option<Vec<PhotoSize>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub delete_chat_photo: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_chat_created: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supergroup_chat_created: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub channel_chat_created: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub migrate_to_chat_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub migrate_from_chat_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pinned_message: Option<Box<Message>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invoice: Option<Invoice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub successful_payment: Option<SuccessfulPayment>,
}