#[macro_use]
extern crate serde_derive;
extern crate serde;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CallbackGame {}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum InputMessageContent {
InputTextMessageContent(Box<InputTextMessageContent>),
InputLocationMessageContent(Box<InputLocationMessageContent>),
InputVenueMessageContent(Box<InputVenueMessageContent>),
InputContactMessageContent(Box<InputContactMessageContent>),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Update {
pub update_id: i64,
pub message: Option<Box<Message>>,
pub edited_message: Option<Box<Message>>,
pub channel_post: Option<Box<Message>>,
pub edited_channel_post: Option<Box<Message>>,
pub inline_query: Option<Box<InlineQuery>>,
pub chosen_inline_result: Option<Box<ChosenInlineResult>>,
pub callback_query: Option<Box<CallbackQuery>>,
pub shipping_query: Option<Box<ShippingQuery>>,
pub pre_checkout_query: Option<Box<PreCheckoutQuery>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WebhookInfo {
pub url: String,
pub has_custom_certificate: bool,
pub pending_update_count: i64,
pub last_error_date: Option<i64>,
pub last_error_message: Option<String>,
pub max_connections: Option<i64>,
pub allowed_updates: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct User {
pub id: i64,
pub is_bot: bool,
pub first_name: String,
pub last_name: Option<String>,
pub username: Option<String>,
pub language_code: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Chat {
pub id: i64,
#[serde(rename = "type")]
pub type_tl: String,
pub title: Option<String>,
pub username: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub all_members_are_administrators: Option<bool>,
pub photo: Option<Box<ChatPhoto>>,
pub description: Option<String>,
pub invite_link: Option<String>,
pub pinned_message: Option<Box<Message>>,
pub sticker_set_name: Option<String>,
pub can_set_sticker_set: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Message {
pub message_id: i64,
pub from: Option<Box<User>>,
pub date: i64,
pub chat: Box<Chat>,
pub forward_from: Option<Box<User>>,
pub forward_from_chat: Option<Box<Chat>>,
pub forward_from_message_id: Option<i64>,
pub forward_signature: Option<String>,
pub forward_date: Option<i64>,
pub reply_to_message: Option<Box<Message>>,
pub edit_date: Option<i64>,
pub media_group_id: Option<String>,
pub author_signature: Option<String>,
pub text: Option<String>,
pub entities: Option<Vec<Box<MessageEntity>>>,
pub caption_entities: Option<Vec<Box<MessageEntity>>>,
pub audio: Option<Box<Audio>>,
pub document: Option<Box<Document>>,
pub game: Option<Box<Game>>,
pub photo: Option<Vec<Box<PhotoSize>>>,
pub sticker: Option<Box<Sticker>>,
pub video: Option<Box<Video>>,
pub voice: Option<Box<Voice>>,
pub video_note: Option<Box<VideoNote>>,
pub caption: Option<String>,
pub contact: Option<Box<Contact>>,
pub location: Option<Box<Location>>,
pub venue: Option<Box<Venue>>,
pub new_chat_members: Option<Vec<Box<User>>>,
pub left_chat_member: Option<Box<User>>,
pub new_chat_title: Option<String>,
pub new_chat_photo: Option<Vec<Box<PhotoSize>>>,
pub delete_chat_photo: Option<bool>,
pub group_chat_created: Option<bool>,
pub supergroup_chat_created: Option<bool>,
pub channel_chat_created: Option<bool>,
pub migrate_to_chat_id: Option<i64>,
pub migrate_from_chat_id: Option<i64>,
pub pinned_message: Option<Box<Message>>,
pub invoice: Option<Box<Invoice>>,
pub successful_payment: Option<Box<SuccessfulPayment>>,
pub connected_website: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MessageEntity {
#[serde(rename = "type")]
pub type_tl: String,
pub offset: i64,
pub length: i64,
pub url: Option<String>,
pub user: Option<Box<User>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PhotoSize {
pub file_id: String,
pub width: i64,
pub height: i64,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Audio {
pub file_id: String,
pub duration: i64,
pub performer: Option<String>,
pub title: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Document {
pub file_id: String,
pub thumb: Option<Box<PhotoSize>>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Video {
pub file_id: String,
pub width: i64,
pub height: i64,
pub duration: i64,
pub thumb: Option<Box<PhotoSize>>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Voice {
pub file_id: String,
pub duration: i64,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct VideoNote {
pub file_id: String,
pub length: i64,
pub duration: i64,
pub thumb: Option<Box<PhotoSize>>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Contact {
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub user_id: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Location {
pub longitude: f64,
pub latitude: f64,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Venue {
pub location: Box<Location>,
pub title: String,
pub address: String,
pub foursquare_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct UserProfilePhotos {
pub total_count: i64,
pub photos: Vec<Vec<Box<PhotoSize>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct File {
pub file_id: String,
pub file_size: Option<i64>,
pub file_path: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ReplyKeyboardMarkup {
pub keyboard: Vec<Vec<Box<KeyboardButton>>>,
pub resize_keyboard: Option<bool>,
pub one_time_keyboard: Option<bool>,
pub selective: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct KeyboardButton {
pub text: String,
pub request_contact: Option<bool>,
pub request_location: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ReplyKeyboardRemove {
pub remove_keyboard: bool,
pub selective: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineKeyboardMarkup {
pub inline_keyboard: Vec<Vec<Box<InlineKeyboardButton>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineKeyboardButton {
pub text: String,
pub url: Option<String>,
pub callback_data: Option<String>,
pub switch_inline_query: Option<String>,
pub switch_inline_query_current_chat: Option<String>,
pub callback_game: Option<Box<CallbackGame>>,
pub pay: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CallbackQuery {
pub id: String,
pub from: Box<User>,
pub message: Option<Box<Message>>,
pub inline_message_id: Option<String>,
pub chat_instance: String,
pub data: Option<String>,
pub game_short_name: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ForceReply {
pub force_reply: bool,
pub selective: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ChatPhoto {
pub small_file_id: String,
pub big_file_id: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ChatMember {
pub user: Box<User>,
pub status: String,
pub until_date: Option<i64>,
pub can_be_edited: Option<bool>,
pub can_change_info: Option<bool>,
pub can_post_messages: Option<bool>,
pub can_edit_messages: Option<bool>,
pub can_delete_messages: Option<bool>,
pub can_invite_users: Option<bool>,
pub can_restrict_members: Option<bool>,
pub can_pin_messages: Option<bool>,
pub can_promote_members: Option<bool>,
pub can_send_messages: Option<bool>,
pub can_send_media_messages: Option<bool>,
pub can_send_other_messages: Option<bool>,
pub can_add_web_page_previews: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseParameters {
pub migrate_to_chat_id: Option<i64>,
pub retry_after: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputMediaPhoto {
#[serde(rename = "type")]
pub type_tl: String,
pub media: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputMediaVideo {
#[serde(rename = "type")]
pub type_tl: String,
pub media: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub width: Option<i64>,
pub height: Option<i64>,
pub duration: Option<i64>,
pub supports_streaming: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Sticker {
pub file_id: String,
pub width: i64,
pub height: i64,
pub thumb: Option<Box<PhotoSize>>,
pub emoji: Option<String>,
pub set_name: Option<String>,
pub mask_position: Option<Box<MaskPosition>>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct StickerSet {
pub name: String,
pub title: String,
pub contains_masks: bool,
pub stickers: Vec<Box<Sticker>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MaskPosition {
pub point: String,
pub x_shift: f64,
pub y_shift: f64,
pub scale: f64,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQuery {
pub id: String,
pub from: Box<User>,
pub location: Option<Box<Location>>,
pub query: String,
pub offset: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultArticle {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub title: String,
pub input_message_content: Box<InputMessageContent>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub url: Option<String>,
pub hide_url: Option<bool>,
pub description: Option<String>,
pub thumb_url: Option<String>,
pub thumb_width: Option<i64>,
pub thumb_height: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultPhoto {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub photo_url: String,
pub thumb_url: String,
pub photo_width: Option<i64>,
pub photo_height: Option<i64>,
pub title: Option<String>,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultGif {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub gif_url: String,
pub gif_width: Option<i64>,
pub gif_height: Option<i64>,
pub gif_duration: Option<i64>,
pub thumb_url: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultMpeg4Gif {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub mpeg4_url: String,
pub mpeg4_width: Option<i64>,
pub mpeg4_height: Option<i64>,
pub mpeg4_duration: Option<i64>,
pub thumb_url: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultVideo {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub video_url: String,
pub mime_type: String,
pub thumb_url: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub video_width: Option<i64>,
pub video_height: Option<i64>,
pub video_duration: Option<i64>,
pub description: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultAudio {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub audio_url: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub performer: Option<String>,
pub audio_duration: Option<i64>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultVoice {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub voice_url: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub voice_duration: Option<i64>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultDocument {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub document_url: String,
pub mime_type: String,
pub description: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
pub thumb_url: Option<String>,
pub thumb_width: Option<i64>,
pub thumb_height: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultLocation {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub latitude: f64,
pub longitude: f64,
pub title: String,
pub live_period: Option<i64>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
pub thumb_url: Option<String>,
pub thumb_width: Option<i64>,
pub thumb_height: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultVenue {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub latitude: f64,
pub longitude: f64,
pub title: String,
pub address: String,
pub foursquare_id: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
pub thumb_url: Option<String>,
pub thumb_width: Option<i64>,
pub thumb_height: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultContact {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
pub thumb_url: Option<String>,
pub thumb_width: Option<i64>,
pub thumb_height: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultGame {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub game_short_name: String,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedPhoto {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub photo_file_id: String,
pub title: Option<String>,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedGif {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub gif_file_id: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedMpeg4Gif {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub mpeg4_file_id: String,
pub title: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedSticker {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub sticker_file_id: String,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedDocument {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub title: String,
pub document_file_id: String,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedVideo {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub video_file_id: String,
pub title: String,
pub description: Option<String>,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedVoice {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub voice_file_id: String,
pub title: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineQueryResultCachedAudio {
#[serde(rename = "type")]
pub type_tl: String,
pub id: String,
pub audio_file_id: String,
pub caption: Option<String>,
pub parse_mode: Option<String>,
pub reply_markup: Option<Box<InlineKeyboardMarkup>>,
pub input_message_content: Option<Box<InputMessageContent>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputTextMessageContent {
pub message_text: String,
pub parse_mode: Option<String>,
pub disable_web_page_preview: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputLocationMessageContent {
pub latitude: f64,
pub longitude: f64,
pub live_period: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputVenueMessageContent {
pub latitude: f64,
pub longitude: f64,
pub title: String,
pub address: String,
pub foursquare_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputContactMessageContent {
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ChosenInlineResult {
pub result_id: String,
pub from: Box<User>,
pub location: Option<Box<Location>>,
pub inline_message_id: Option<String>,
pub query: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct LabeledPrice {
pub label: String,
pub amount: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Invoice {
pub title: String,
pub description: String,
pub start_parameter: String,
pub currency: String,
pub total_amount: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ShippingAddress {
pub country_code: String,
pub state: String,
pub city: String,
pub street_line1: String,
pub street_line2: String,
pub post_code: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct OrderInfo {
pub name: Option<String>,
pub phone_number: Option<String>,
pub email: Option<String>,
pub shipping_address: Option<Box<ShippingAddress>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ShippingOption {
pub id: String,
pub title: String,
pub prices: Vec<Box<LabeledPrice>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SuccessfulPayment {
pub currency: String,
pub total_amount: i64,
pub invoice_payload: String,
pub shipping_option_id: Option<String>,
pub order_info: Option<Box<OrderInfo>>,
pub telegram_payment_charge_id: String,
pub provider_payment_charge_id: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ShippingQuery {
pub id: String,
pub from: Box<User>,
pub invoice_payload: String,
pub shipping_address: Box<ShippingAddress>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PreCheckoutQuery {
pub id: String,
pub from: Box<User>,
pub currency: String,
pub total_amount: i64,
pub invoice_payload: String,
pub shipping_option_id: Option<String>,
pub order_info: Option<Box<OrderInfo>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Game {
pub title: String,
pub description: String,
pub photo: Vec<Box<PhotoSize>>,
pub text: Option<String>,
pub text_entities: Option<Vec<Box<MessageEntity>>>,
pub animation: Option<Box<Animation>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Animation {
pub file_id: String,
pub thumb: Option<Box<PhotoSize>>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GameHighScore {
pub position: i64,
pub user: Box<User>,
pub score: i64,
}