use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::types::{
Animation,
Audio,
Chat,
Checklist,
Contact,
Dice,
Document,
Game,
Giveaway,
GiveawayWinners,
Integer,
Invoice,
LinkPreviewOptions,
LivePhoto,
Location,
Message,
MessageOrigin,
PaidMediaInfo,
PhotoSize,
Poll,
Sticker,
Story,
Venue,
Video,
VideoNote,
Voice,
};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum ReplyTo {
#[serde(rename = "reply_to_message")]
Message(Box<Message>),
#[serde(rename = "reply_to_story")]
Story(Story),
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ExternalReplyInfo {
pub origin: MessageOrigin,
pub chat: Option<Chat>,
pub has_media_spoiler: Option<bool>,
pub link_preview_options: Option<LinkPreviewOptions>,
pub message_id: Option<Integer>,
#[serde(flatten)]
pub data: ExternalReplyData,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ExternalReplyData {
Animation(Animation),
Audio(Audio),
Checklist(Checklist),
Contact(Contact),
Dice(Dice),
Document(Document),
Game(Game),
Giveaway(Giveaway),
GiveawayWinners(GiveawayWinners),
Invoice(Invoice),
LivePhoto(LivePhoto),
Location(Location),
PaidMedia(PaidMediaInfo),
Photo(Vec<PhotoSize>),
Poll(Box<Poll>),
Sticker(Sticker),
Story(Story),
Venue(Venue),
Video(Video),
VideoNote(VideoNote),
Voice(Voice),
#[serde(untagged)]
Unknown(Value),
}