use crate::chat::Location;
use crate::user::User;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQuery {
pub id: String,
pub from: User,
pub query: String,
pub offset: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChosenInlineResult {
pub result_id: String,
pub from: User,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Location>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inline_message_id: Option<String>,
pub query: String,
}
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum InlineQueryResult {
Article(InlineQueryResultArticle),
Photo(InlineQueryResultPhoto),
Gif(InlineQueryResultGif),
Mpeg4Gif(InlineQueryResultMpeg4Gif),
Video(InlineQueryResultVideo),
Audio(InlineQueryResultAudio),
Voice(InlineQueryResultVoice),
Document(InlineQueryResultDocument),
Location(InlineQueryResultLocation),
Venue(InlineQueryResultVenue),
Contact(InlineQueryResultContact),
Game(InlineQueryResultGame),
#[serde(rename = "photo")]
CachedPhoto(InlineQueryResultCachedPhoto),
#[serde(rename = "gif")]
CachedGif(InlineQueryResultCachedGif),
#[serde(rename = "mpeg4_gif")]
CachedMpeg4Gif(InlineQueryResultCachedMpeg4Gif),
#[serde(rename = "sticker")]
CachedSticker(InlineQueryResultCachedSticker),
#[serde(rename = "document")]
CachedDocument(InlineQueryResultCachedDocument),
#[serde(rename = "video")]
CachedVideo(InlineQueryResultCachedVideo),
#[serde(rename = "voice")]
CachedVoice(InlineQueryResultCachedVoice),
#[serde(rename = "audio")]
CachedAudio(InlineQueryResultCachedAudio),
}
impl<'de> Deserialize<'de> for InlineQueryResult {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
use serde::de::Error as _;
let value = serde_json::Value::deserialize(deserializer)?;
let tag = value
.get("type")
.and_then(serde_json::Value::as_str)
.ok_or_else(|| D::Error::custom("InlineQueryResult is missing its `type` field"))?
.to_owned();
let cached = |field: &str| value.get(field).is_some();
macro_rules! into {
($variant:ident, $ty:ty) => {
<$ty>::deserialize(value)
.map(InlineQueryResult::$variant)
.map_err(D::Error::custom)
};
}
match tag.as_str() {
"article" => into!(Article, InlineQueryResultArticle),
"location" => into!(Location, InlineQueryResultLocation),
"venue" => into!(Venue, InlineQueryResultVenue),
"contact" => into!(Contact, InlineQueryResultContact),
"game" => into!(Game, InlineQueryResultGame),
"sticker" => into!(CachedSticker, InlineQueryResultCachedSticker),
"photo" if cached("photo_file_id") => into!(CachedPhoto, InlineQueryResultCachedPhoto),
"photo" => into!(Photo, InlineQueryResultPhoto),
"gif" if cached("gif_file_id") => into!(CachedGif, InlineQueryResultCachedGif),
"gif" => into!(Gif, InlineQueryResultGif),
"mpeg4_gif" if cached("mpeg4_file_id") => {
into!(CachedMpeg4Gif, InlineQueryResultCachedMpeg4Gif)
}
"mpeg4_gif" => into!(Mpeg4Gif, InlineQueryResultMpeg4Gif),
"video" if cached("video_file_id") => into!(CachedVideo, InlineQueryResultCachedVideo),
"video" => into!(Video, InlineQueryResultVideo),
"audio" if cached("audio_file_id") => into!(CachedAudio, InlineQueryResultCachedAudio),
"audio" => into!(Audio, InlineQueryResultAudio),
"voice" if cached("voice_file_id") => into!(CachedVoice, InlineQueryResultCachedVoice),
"voice" => into!(Voice, InlineQueryResultVoice),
"document" if cached("document_file_id") => {
into!(CachedDocument, InlineQueryResultCachedDocument)
}
"document" => into!(Document, InlineQueryResultDocument),
other => Err(D::Error::custom(format!(
"unknown variant `{other}`, expected a valid InlineQueryResult type"
))),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultArticle {
pub id: String,
pub title: String,
pub input_message_content: InputMessageContent,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultPhoto {
pub id: String,
pub photo_url: String,
pub thumbnail_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultGif {
pub id: String,
pub gif_url: String,
pub thumbnail_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_mime_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultMpeg4Gif {
pub id: String,
pub mpeg4_url: String,
pub thumbnail_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_mime_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultVideo {
pub id: String,
pub video_url: String,
pub mime_type: String,
pub thumbnail_url: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultAudio {
pub id: String,
pub audio_url: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub performer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultVoice {
pub id: String,
pub voice_url: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub voice_duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultDocument {
pub id: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
pub document_url: String,
pub mime_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultLocation {
pub id: String,
pub latitude: f64,
pub longitude: f64,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub horizontal_accuracy: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub live_period: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub heading: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proximity_alert_radius: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultVenue {
pub id: String,
pub latitude: f64,
pub longitude: f64,
pub title: String,
pub address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub foursquare_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub foursquare_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub google_place_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub google_place_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultContact {
pub id: String,
pub phone_number: String,
pub first_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vcard: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultGame {
pub id: String,
pub game_short_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedPhoto {
pub id: String,
pub photo_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedGif {
pub id: String,
pub gif_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedMpeg4Gif {
pub id: String,
pub mpeg4_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedSticker {
pub id: String,
pub sticker_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedDocument {
pub id: String,
pub title: String,
pub document_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedVideo {
pub id: String,
pub video_file_id: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_caption_above_media: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedVoice {
pub id: String,
pub voice_file_id: String,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedAudio {
pub id: String,
pub audio_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum InputMessageContent {
Text(InputTextMessageContent),
Rich(crate::rich_message::InputRichMessageContent),
Venue(InputVenueMessageContent),
Location(InputLocationMessageContent),
Contact(InputContactMessageContent),
Invoice(InputInvoiceMessageContent),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputTextMessageContent {
pub message_text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<crate::message::ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub link_preview_options: Option<crate::message::LinkPreviewOptions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputLocationMessageContent {
pub latitude: f64,
pub longitude: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub horizontal_accuracy: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub live_period: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub heading: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proximity_alert_radius: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputVenueMessageContent {
pub latitude: f64,
pub longitude: f64,
pub title: String,
pub address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub foursquare_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub foursquare_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub google_place_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub google_place_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputContactMessageContent {
pub phone_number: String,
pub first_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vcard: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputInvoiceMessageContent {
pub title: String,
pub description: String,
pub payload: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_token: Option<String>,
pub currency: String,
pub prices: Vec<crate::payments::LabeledPrice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tip_amount: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggested_tip_amounts: Option<Vec<u64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_size: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_width: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_height: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub need_name: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub need_phone_number: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub need_email: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub need_shipping_address: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_phone_number_to_provider: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_email_to_provider: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_flexible: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SentWebAppMessage {
#[serde(skip_serializing_if = "Option::is_none")]
pub inline_message_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SentGuestMessage {
pub inline_message_id: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct InlineQueryResultsButton {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub web_app: Option<crate::message::WebAppInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_parameter: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct PreparedInlineMessage {
pub id: String,
pub expiration_date: i64,
}