use crate::types::*;
use std::ops::Not;
#[derive(Serialize, Debug)]
#[serde(tag = "type")]
pub enum InlineQueryResult {
#[serde(rename = "audio")]
InlineQueryResultCachedAudio(InlineQueryResultCachedAudio),
#[serde(rename = "document")]
InlineQueryResultCachedDocument(InlineQueryResultCachedDocument),
#[serde(rename = "gif")]
InlineQueryResultCachedGif(InlineQueryResultCachedGif),
#[serde(rename = "mpeg4gif")]
InlineQueryResultCachedMpeg4Gif(InlineQueryResultCachedMpeg4Gif),
#[serde(rename = "photo")]
InlineQueryResultCachedPhoto(InlineQueryResultCachedPhoto),
#[serde(rename = "sticker")]
InlineQueryResultCachedSticker(InlineQueryResultCachedSticker),
#[serde(rename = "video")]
InlineQueryResultCachedVideo(InlineQueryResultCachedVideo),
#[serde(rename = "voice")]
InlineQueryResultCachedVoice(InlineQueryResultCachedVoice),
#[serde(rename = "article")]
InlineQueryResultArticle(InlineQueryResultArticle),
#[serde(rename = "audio")]
InlineQueryResultAudio(InlineQueryResultAudio),
#[serde(rename = "contact")]
InlineQueryResultContact(InlineQueryResultContact),
#[serde(rename = "game")]
InlineQueryResultGame(InlineQueryResultGame),
#[serde(rename = "document")]
InlineQueryResultDocument(InlineQueryResultDocument),
#[serde(rename = "gif")]
InlineQueryResultGif(InlineQueryResultGif),
#[serde(rename = "location")]
InlineQueryResultLocation(InlineQueryResultLocation),
#[serde(rename = "mpeg4_gif")]
InlineQueryResultMpeg4Gif(InlineQueryResultMpeg4Gif),
#[serde(rename = "photo")]
InlineQueryResultPhoto(InlineQueryResultPhoto),
#[serde(rename = "venue")]
InlineQueryResultVenue(InlineQueryResultVenue),
#[serde(rename = "video")]
InlineQueryResultVideo(InlineQueryResultVideo),
#[serde(rename = "voice")]
InlineQueryResultVoice(InlineQueryResultVoice),
}
#[derive(Serialize, Debug)]
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<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Not::not")]
pub hide_url: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultPhoto {
pub id: String,
pub photo_url: String,
pub thumb_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_height: Option<Integer>,
#[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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultGif {
pub id: String,
pub gif_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_height: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_duration: Option<Integer>,
pub thumb_url: 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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultMpeg4Gif {
pub id: String,
pub mpeg4_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_height: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_duration: Option<Integer>,
pub thumb_url: 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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultVideo {
pub id: String,
pub video_url: String,
pub mime_type: String,
pub thumb_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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_height: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_duration: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub performer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_duration: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_duration: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
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<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultLocation {
pub id: String,
pub latitude: Float,
pub longitude: Float,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub live_period: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultVenue {
pub id: String,
pub latitude: Float,
pub longitude: Float,
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 reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultContact {
pub id: String,
pub phone_number: String,
pub first_name: String,
pub last_name: String,
pub vcard: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_width: Option<Integer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultGame {
pub id: String,
pub game_short_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
pub struct InlineQueryResultCachedSticker {
pub id: String,
pub sticker_file_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
#[derive(Serialize, Debug)]
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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<InlineKeyboardMarkup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_message_content: Option<InputMessageContent>,
}
impl InlineQueryResultArticle {
pub fn new<T: Into<String>, U: Into<String>, V: Into<InputMessageContent>>(
id: T,
title: U,
input_message_content: V,
) -> InlineQueryResultArticle {
InlineQueryResultArticle {
id: id.into(),
title: title.into(),
input_message_content: input_message_content.into(),
reply_markup: None,
url: None,
hide_url: false,
description: None,
thumb_url: None,
thumb_width: None,
thumb_height: None,
}
}
pub fn reply_markup<T: Into<InlineKeyboardMarkup>>(&mut self, reply_markup: T) -> &mut Self {
self.reply_markup = Some(reply_markup.into());
self
}
pub fn url<T: Into<String>>(&mut self, url: T) -> &mut Self {
self.url = Some(url.into());
self
}
pub fn hide_url<T: Into<bool>>(&mut self, hide_url: T) -> &mut Self {
self.hide_url = hide_url.into();
self
}
pub fn description<T: Into<String>>(&mut self, description: T) -> &mut Self {
self.description = Some(description.into());
self
}
pub fn thumb_url<T: Into<String>>(&mut self, thumb_url: T) -> &mut Self {
self.thumb_url = Some(thumb_url.into());
self
}
pub fn thumb_width<T: Into<Integer>>(&mut self, thumb_width: T) -> &mut Self {
self.thumb_width = Some(thumb_width.into());
self
}
pub fn thumb_height<T: Into<Integer>>(&mut self, thumb_height: T) -> &mut Self {
self.thumb_height = Some(thumb_height.into());
self
}
}
impl From<InlineQueryResultCachedAudio> for InlineQueryResult {
fn from(audio: InlineQueryResultCachedAudio) -> Self {
InlineQueryResult::InlineQueryResultCachedAudio(audio)
}
}
impl From<InlineQueryResultCachedDocument> for InlineQueryResult {
fn from(document: InlineQueryResultCachedDocument) -> Self {
InlineQueryResult::InlineQueryResultCachedDocument(document)
}
}
impl From<InlineQueryResultCachedGif> for InlineQueryResult {
fn from(gif: InlineQueryResultCachedGif) -> Self {
InlineQueryResult::InlineQueryResultCachedGif(gif)
}
}
impl From<InlineQueryResultCachedMpeg4Gif> for InlineQueryResult {
fn from(mpeg4_gif: InlineQueryResultCachedMpeg4Gif) -> Self {
InlineQueryResult::InlineQueryResultCachedMpeg4Gif(mpeg4_gif)
}
}
impl From<InlineQueryResultCachedPhoto> for InlineQueryResult {
fn from(photo: InlineQueryResultCachedPhoto) -> Self {
InlineQueryResult::InlineQueryResultCachedPhoto(photo)
}
}
impl From<InlineQueryResultCachedSticker> for InlineQueryResult {
fn from(sticker: InlineQueryResultCachedSticker) -> Self {
InlineQueryResult::InlineQueryResultCachedSticker(sticker)
}
}
impl From<InlineQueryResultCachedVideo> for InlineQueryResult {
fn from(video: InlineQueryResultCachedVideo) -> Self {
InlineQueryResult::InlineQueryResultCachedVideo(video)
}
}
impl From<InlineQueryResultCachedVoice> for InlineQueryResult {
fn from(voice: InlineQueryResultCachedVoice) -> Self {
InlineQueryResult::InlineQueryResultCachedVoice(voice)
}
}
impl From<InlineQueryResultArticle> for InlineQueryResult {
fn from(article: InlineQueryResultArticle) -> Self {
InlineQueryResult::InlineQueryResultArticle(article)
}
}
impl From<InlineQueryResultAudio> for InlineQueryResult {
fn from(audio: InlineQueryResultAudio) -> Self {
InlineQueryResult::InlineQueryResultAudio(audio)
}
}
impl From<InlineQueryResultContact> for InlineQueryResult {
fn from(contact: InlineQueryResultContact) -> Self {
InlineQueryResult::InlineQueryResultContact(contact)
}
}
impl From<InlineQueryResultGame> for InlineQueryResult {
fn from(game: InlineQueryResultGame) -> Self {
InlineQueryResult::InlineQueryResultGame(game)
}
}
impl From<InlineQueryResultDocument> for InlineQueryResult {
fn from(document: InlineQueryResultDocument) -> Self {
InlineQueryResult::InlineQueryResultDocument(document)
}
}
impl From<InlineQueryResultGif> for InlineQueryResult {
fn from(gif: InlineQueryResultGif) -> Self {
InlineQueryResult::InlineQueryResultGif(gif)
}
}
impl From<InlineQueryResultLocation> for InlineQueryResult {
fn from(location: InlineQueryResultLocation) -> Self {
InlineQueryResult::InlineQueryResultLocation(location)
}
}
impl From<InlineQueryResultMpeg4Gif> for InlineQueryResult {
fn from(mpeg4_gif: InlineQueryResultMpeg4Gif) -> Self {
InlineQueryResult::InlineQueryResultMpeg4Gif(mpeg4_gif)
}
}
impl From<InlineQueryResultPhoto> for InlineQueryResult {
fn from(photo: InlineQueryResultPhoto) -> Self {
InlineQueryResult::InlineQueryResultPhoto(photo)
}
}
impl From<InlineQueryResultVenue> for InlineQueryResult {
fn from(venue: InlineQueryResultVenue) -> Self {
InlineQueryResult::InlineQueryResultVenue(venue)
}
}
impl From<InlineQueryResultVideo> for InlineQueryResult {
fn from(video: InlineQueryResultVideo) -> Self {
InlineQueryResult::InlineQueryResultVideo(video)
}
}
impl From<InlineQueryResultVoice> for InlineQueryResult {
fn from(voice: InlineQueryResultVoice) -> Self {
InlineQueryResult::InlineQueryResultVoice(voice)
}
}
#[derive(Serialize, Debug)]
#[serde(untagged)]
pub enum InputMessageContent {
InputTextMessageContent(InputTextMessageContent),
InputLocationMessageContent(InputLocationMessageContent),
InputVenueMessageContent(InputVenueMessageContent),
InputContactMessageContent(InputContactMessageContent),
}
#[derive(Serialize, Debug)]
pub struct InputTextMessageContent {
pub message_text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<ParseMode>,
#[serde(skip_serializing_if = "Not::not")]
pub disable_web_page_preview: bool,
}
#[derive(Serialize, Debug)]
pub struct InputLocationMessageContent {
pub latitude: Float,
pub longitude: Float,
#[serde(skip_serializing_if = "Option::is_none")]
pub live_period: Option<Integer>,
}
#[derive(Serialize, Debug)]
pub struct InputVenueMessageContent {
pub latitude: Float,
pub longitude: Float,
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>,
}
#[derive(Serialize, Debug)]
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>,
}
impl From<InputTextMessageContent> for InputMessageContent {
fn from(value: InputTextMessageContent) -> Self {
InputMessageContent::InputTextMessageContent(value)
}
}
impl From<InputLocationMessageContent> for InputMessageContent {
fn from(value: InputLocationMessageContent) -> Self {
InputMessageContent::InputLocationMessageContent(value)
}
}
impl From<InputVenueMessageContent> for InputMessageContent {
fn from(value: InputVenueMessageContent) -> Self {
InputMessageContent::InputVenueMessageContent(value)
}
}
impl From<InputContactMessageContent> for InputMessageContent {
fn from(value: InputContactMessageContent) -> Self {
InputMessageContent::InputContactMessageContent(value)
}
}