use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::chat::Chat;
use super::checklists::Checklist;
use super::dice::Dice;
use super::files::animation::Animation;
use super::files::audio::Audio;
use super::files::contact::Contact;
use super::files::document::Document;
use super::files::location::Location;
use super::files::photo_size::PhotoSize;
use super::files::sticker::Sticker;
use super::files::venue::Venue;
use super::files::video::Video;
use super::files::video_note::VideoNote;
use super::files::voice::Voice;
use super::games::game::Game;
use super::giveaway::{Giveaway, GiveawayWinners};
use super::link_preview_options::LinkPreviewOptions;
use super::message_entity::MessageEntity;
use super::message_origin::MessageOrigin;
use super::paid_media::PaidMediaInfo;
use super::payment::invoice::Invoice;
use super::poll::Poll;
use super::story::Story;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct ExternalReplyInfo {
pub origin: MessageOrigin,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat: Option<Chat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub link_preview_options: Option<LinkPreviewOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub animation: Option<Animation>,
#[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 photo: Option<Vec<PhotoSize>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sticker: Option<Sticker>,
#[serde(skip_serializing_if = "Option::is_none")]
pub story: Option<Story>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video: Option<Video>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_note: Option<VideoNote>,
#[serde(skip_serializing_if = "Option::is_none")]
pub voice: Option<Voice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_media_spoiler: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checklist: Option<Checklist>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contact: Option<Contact>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dice: Option<Dice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub game: Option<Game>,
#[serde(skip_serializing_if = "Option::is_none")]
pub giveaway: Option<Giveaway>,
#[serde(skip_serializing_if = "Option::is_none")]
pub giveaway_winners: Option<GiveawayWinners>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invoice: Option<Invoice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Location>,
#[serde(skip_serializing_if = "Option::is_none")]
pub poll: Option<Poll>,
#[serde(skip_serializing_if = "Option::is_none")]
pub venue: Option<Venue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub paid_media: Option<PaidMediaInfo>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[non_exhaustive]
pub struct TextQuote {
pub text: String,
pub position: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_manual: Option<bool>,
}
impl_new!(TextQuote {
text: String,
position: i64
});
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[non_exhaustive]
pub struct ReplyParameters {
pub message_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_id: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_sending_without_reply: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote_parse_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote_position: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checklist_task_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub poll_option_id: Option<String>,
}
impl_new!(ReplyParameters { message_id: i64 });