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,
pub chat_type: Option<String>,
pub location: Option<Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChosenInlineResult {
pub result_id: String,
pub from: User,
pub location: Option<Location>,
pub inline_message_id: Option<String>,
pub query: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[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),
CachedPhoto(InlineQueryResultCachedPhoto),
CachedGif(InlineQueryResultCachedGif),
CachedMpeg4Gif(InlineQueryResultCachedMpeg4Gif),
CachedSticker(InlineQueryResultCachedSticker),
CachedDocument(InlineQueryResultCachedDocument),
CachedVideo(InlineQueryResultCachedVideo),
CachedVoice(InlineQueryResultCachedVoice),
CachedAudio(InlineQueryResultCachedAudio),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultArticle {
pub id: String,
pub title: String,
pub input_message_content: InputMessageContent,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub url: Option<String>,
pub description: Option<String>,
pub thumbnail_url: Option<String>,
pub thumbnail_width: Option<u32>,
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultPhoto {
pub id: String,
pub photo_url: String,
pub thumbnail_url: String,
pub photo_width: Option<u32>,
pub photo_height: Option<u32>,
pub title: Option<String>,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultGif {
pub id: String,
pub gif_url: String,
pub thumbnail_url: String,
pub gif_width: Option<u32>,
pub gif_height: Option<u32>,
pub gif_duration: Option<u32>,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultMpeg4Gif {
pub id: String,
pub mpeg4_url: String,
pub thumbnail_url: String,
pub mpeg4_width: Option<u32>,
pub mpeg4_height: Option<u32>,
pub mpeg4_duration: Option<u32>,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[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,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub video_width: Option<u32>,
pub video_height: Option<u32>,
pub video_duration: Option<u32>,
pub description: Option<String>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultAudio {
pub id: String,
pub audio_url: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub performer: Option<String>,
pub audio_duration: Option<u32>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultVoice {
pub id: String,
pub voice_url: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub voice_duration: Option<u32>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultDocument {
pub id: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub document_url: String,
pub mime_type: String,
pub description: Option<String>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub thumbnail_url: Option<String>,
pub thumbnail_width: Option<u32>,
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,
pub horizontal_accuracy: Option<f64>,
pub live_period: Option<u32>,
pub heading: Option<u16>,
pub proximity_alert_radius: Option<u32>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub thumbnail_url: Option<String>,
pub thumbnail_width: Option<u32>,
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,
pub foursquare_id: Option<String>,
pub foursquare_type: Option<String>,
pub google_place_id: Option<String>,
pub google_place_type: Option<String>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub thumbnail_url: Option<String>,
pub thumbnail_width: Option<u32>,
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultContact {
pub id: String,
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub vcard: Option<String>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub thumbnail_url: Option<String>,
pub thumbnail_width: Option<u32>,
pub thumbnail_height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultGame {
pub id: String,
pub game_short_name: String,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedPhoto {
pub id: String,
pub photo_file_id: String,
pub title: Option<String>,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedGif {
pub id: String,
pub gif_file_id: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedMpeg4Gif {
pub id: String,
pub mpeg4_file_id: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedSticker {
pub id: String,
pub sticker_file_id: String,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
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,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
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,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
pub show_caption_above_media: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedVoice {
pub id: String,
pub voice_file_id: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultCachedAudio {
pub id: String,
pub audio_file_id: String,
pub caption: Option<String>,
pub parse_mode: Option<crate::message::ParseMode>,
pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum InputMessageContent {
Text(InputTextMessageContent),
Location(InputLocationMessageContent),
Venue(InputVenueMessageContent),
Contact(InputContactMessageContent),
Invoice(InputInvoiceMessageContent),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputTextMessageContent {
pub message_text: String,
pub parse_mode: Option<crate::message::ParseMode>,
pub entities: Option<Vec<crate::message::MessageEntity>>,
pub link_preview_options: Option<crate::message::LinkPreviewOptions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputLocationMessageContent {
pub latitude: f64,
pub longitude: f64,
pub horizontal_accuracy: Option<f64>,
pub live_period: Option<u32>,
pub heading: Option<u16>,
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,
pub foursquare_id: Option<String>,
pub foursquare_type: Option<String>,
pub google_place_id: Option<String>,
pub google_place_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputContactMessageContent {
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub vcard: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputInvoiceMessageContent {
pub title: String,
pub description: String,
pub payload: String,
pub provider_token: Option<String>,
pub currency: String,
pub prices: Vec<crate::payments::LabeledPrice>,
pub max_tip_amount: Option<u64>,
pub suggested_tip_amounts: Option<Vec<u64>>,
pub provider_data: Option<String>,
pub photo_url: Option<String>,
pub photo_size: Option<u64>,
pub photo_width: Option<u32>,
pub photo_height: Option<u32>,
pub need_name: Option<bool>,
pub need_phone_number: Option<bool>,
pub need_email: Option<bool>,
pub need_shipping_address: Option<bool>,
pub send_phone_number_to_provider: Option<bool>,
pub send_email_to_provider: Option<bool>,
pub is_flexible: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SentWebAppMessage {
pub inline_message_id: Option<String>,
}