use crate::helpers::*;
#[derive(Debug, Clone, Deserialize)]
#[serde(untagged)]
pub enum ChatMember {
Owner(ChatMemberOwner),
Administrator(ChatMemberAdministrator),
Member(ChatMemberMember),
Restricted(ChatMemberRestricted),
Left(ChatMemberLeft),
Banned(ChatMemberBanned),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum BotCommandScope {
#[serde(rename = "default")]
Default(BotCommandScopeDefault),
#[serde(rename = "all_private_chats")]
AllPrivateChats(BotCommandScopeAllPrivateChats),
#[serde(rename = "all_group_chats")]
AllGroupChats(BotCommandScopeAllGroupChats),
#[serde(rename = "all_chat_administrators")]
AllChatAdministrators(BotCommandScopeAllChatAdministrators),
#[serde(rename = "chat")]
Chat(BotCommandScopeChat),
#[serde(rename = "chat_administrators")]
ChatAdministrators(BotCommandScopeChatAdministrators),
#[serde(rename = "chat_member")]
ChatMember(BotCommandScopeChatMember),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum MenuButton {
#[serde(rename = "commands")]
Commands(MenuButtonCommands),
#[serde(rename = "web_app")]
WebApp(MenuButtonWebApp),
#[serde(rename = "default")]
Default(MenuButtonDefault),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum InputMedia {
#[serde(rename = "animation")]
Animation(InputMediaAnimation),
#[serde(rename = "document")]
Document(InputMediaDocument),
#[serde(rename = "audio")]
Audio(InputMediaAudio),
#[serde(rename = "photo")]
Photo(InputMediaPhoto),
#[serde(rename = "video")]
Video(InputMediaVideo),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum InlineQueryResult {
#[serde(rename = "audio")]
CachedAudio(InlineQueryResultCachedAudio),
#[serde(rename = "document")]
CachedDocument(InlineQueryResultCachedDocument),
#[serde(rename = "gif")]
CachedGif(InlineQueryResultCachedGif),
#[serde(rename = "mpeg4_gif")]
CachedMpeg4Gif(InlineQueryResultCachedMpeg4Gif),
#[serde(rename = "photo")]
CachedPhoto(InlineQueryResultCachedPhoto),
#[serde(rename = "sticker")]
CachedSticker(InlineQueryResultCachedSticker),
#[serde(rename = "video")]
CachedVideo(InlineQueryResultCachedVideo),
#[serde(rename = "voice")]
CachedVoice(InlineQueryResultCachedVoice),
#[serde(rename = "article")]
Article(InlineQueryResultArticle),
#[serde(rename = "audio")]
Audio(InlineQueryResultAudio),
#[serde(rename = "contact")]
Contact(InlineQueryResultContact),
#[serde(rename = "game")]
Game(InlineQueryResultGame),
#[serde(rename = "document")]
Document(InlineQueryResultDocument),
#[serde(rename = "gif")]
Gif(InlineQueryResultGif),
#[serde(rename = "location")]
Location(InlineQueryResultLocation),
#[serde(rename = "mpeg4_gif")]
Mpeg4Gif(InlineQueryResultMpeg4Gif),
#[serde(rename = "photo")]
Photo(InlineQueryResultPhoto),
#[serde(rename = "venue")]
Venue(InlineQueryResultVenue),
#[serde(rename = "video")]
Video(InlineQueryResultVideo),
#[serde(rename = "voice")]
Voice(InlineQueryResultVoice),
}
#[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)]
#[serde(tag = "source")]
pub enum PassportElementError {
#[serde(rename = "data")]
DataField(PassportElementErrorDataField),
#[serde(rename = "front_side")]
FrontSide(PassportElementErrorFrontSide),
#[serde(rename = "reverse_side")]
ReverseSide(PassportElementErrorReverseSide),
#[serde(rename = "selfie")]
Selfie(PassportElementErrorSelfie),
#[serde(rename = "file")]
File(PassportElementErrorFile),
#[serde(rename = "files")]
Files(PassportElementErrorFiles),
#[serde(rename = "translation_file")]
TranslationFile(PassportElementErrorTranslationFile),
#[serde(rename = "translation_files")]
TranslationFiles(PassportElementErrorTranslationFiles),
#[serde(rename = "unspecified")]
Unspecified(PassportElementErrorUnspecified),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ReplyMarkup {
InlineKeyboardMarkup(InlineKeyboardMarkup),
Keyboard(ReplyKeyboardMarkup),
KeyboardRemove(ReplyKeyboardRemove),
Force(ForceReply),
}
#[derive(Debug, Clone, Deserialize)]
pub struct WebhookInfo {
pub url: String,
pub has_custom_certificate: bool,
pub pending_update_count: i64,
pub ip_address: Option<String>,
pub last_error_date: Option<i64>,
pub last_error_message: Option<String>,
pub last_synchronization_error_date: Option<i64>,
pub max_connections: Option<i64>,
pub allowed_updates: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: i64,
pub is_bot: bool,
pub first_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_premium: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub added_to_attachment_menu: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_join_groups: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_read_all_group_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_inline_queries: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Chat {
pub id: i64,
#[serde(rename = "type")]
pub type_: String,
pub title: Option<String>,
pub username: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub is_forum: Option<bool>,
pub photo: Option<ChatPhoto>,
pub active_usernames: Option<Vec<String>>,
pub emoji_status_custom_emoji_id: Option<String>,
pub bio: Option<String>,
pub has_private_forwards: Option<bool>,
pub has_restricted_voice_and_video_messages: Option<bool>,
pub join_to_send_messages: Option<bool>,
pub join_by_request: Option<bool>,
pub description: Option<String>,
pub invite_link: Option<String>,
pub pinned_message: Option<Box<Message>>,
pub permissions: Option<ChatPermissions>,
pub slow_mode_delay: Option<i64>,
pub message_auto_delete_time: Option<i64>,
pub has_aggressive_anti_spam_enabled: Option<bool>,
pub has_hidden_members: Option<bool>,
pub has_protected_content: Option<bool>,
pub sticker_set_name: Option<String>,
pub can_set_sticker_set: Option<bool>,
pub linked_chat_id: Option<i64>,
pub location: Option<ChatLocation>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Message {
pub message_id: i64,
pub message_thread_id: Option<i64>,
pub from: Option<User>,
pub sender_chat: Option<Chat>,
pub date: i64,
pub chat: Chat,
pub forward_from: Option<User>,
pub forward_from_chat: Option<Chat>,
pub forward_from_message_id: Option<i64>,
pub forward_signature: Option<String>,
pub forward_sender_name: Option<String>,
pub forward_date: Option<i64>,
pub is_topic_message: Option<bool>,
pub is_automatic_forward: Option<bool>,
pub reply_to_message: Option<Box<Message>>,
pub via_bot: Option<User>,
pub edit_date: Option<i64>,
pub has_protected_content: Option<bool>,
pub media_group_id: Option<String>,
pub author_signature: Option<String>,
pub text: Option<String>,
pub entities: Option<Vec<MessageEntity>>,
pub animation: Option<Animation>,
pub audio: Option<Audio>,
pub document: Option<Document>,
pub photo: Option<Vec<PhotoSize>>,
pub sticker: Option<Sticker>,
pub video: Option<Video>,
pub video_note: Option<VideoNote>,
pub voice: Option<Voice>,
pub caption: Option<String>,
pub caption_entities: Option<Vec<MessageEntity>>,
pub has_media_spoiler: Option<bool>,
pub contact: Option<Contact>,
pub dice: Option<Dice>,
pub game: Option<Game>,
pub poll: Option<Poll>,
pub venue: Option<Venue>,
pub location: Option<Location>,
pub new_chat_members: Option<Vec<User>>,
pub left_chat_member: Option<User>,
pub new_chat_title: Option<String>,
pub new_chat_photo: Option<Vec<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 message_auto_delete_timer_changed: Option<MessageAutoDeleteTimerChanged>,
pub migrate_to_chat_id: Option<i64>,
pub migrate_from_chat_id: Option<i64>,
pub pinned_message: Option<Box<Message>>,
pub invoice: Option<Invoice>,
pub successful_payment: Option<SuccessfulPayment>,
pub user_shared: Option<UserShared>,
pub chat_shared: Option<ChatShared>,
pub connected_website: Option<String>,
pub write_access_allowed: Option<WriteAccessAllowed>,
pub passport_data: Option<PassportData>,
pub proximity_alert_triggered: Option<ProximityAlertTriggered>,
pub forum_topic_created: Option<ForumTopicCreated>,
pub forum_topic_edited: Option<ForumTopicEdited>,
pub forum_topic_closed: Option<ForumTopicClosed>,
pub forum_topic_reopened: Option<ForumTopicReopened>,
pub general_forum_topic_hidden: Option<GeneralForumTopicHidden>,
pub general_forum_topic_unhidden: Option<GeneralForumTopicUnhidden>,
pub video_chat_scheduled: Option<VideoChatScheduled>,
pub video_chat_started: Option<VideoChatStarted>,
pub video_chat_ended: Option<VideoChatEnded>,
pub video_chat_participants_invited: Option<VideoChatParticipantsInvited>,
pub web_app_data: Option<WebAppData>,
pub reply_markup: Option<InlineKeyboardMarkup>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MessageId {
pub message_id: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageEntity {
#[serde(rename = "type")]
pub type_: String,
pub offset: i64,
pub length: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<User>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_emoji_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PhotoSize {
pub file_id: String,
pub file_unique_id: String,
pub width: i64,
pub height: i64,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Animation {
pub file_id: String,
pub file_unique_id: String,
pub width: i64,
pub height: i64,
pub duration: i64,
pub thumb: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Audio {
pub file_id: String,
pub file_unique_id: String,
pub duration: i64,
pub performer: Option<String>,
pub title: Option<String>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
pub thumb: Option<PhotoSize>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Document {
pub file_id: String,
pub file_unique_id: String,
pub thumb: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Video {
pub file_id: String,
pub file_unique_id: String,
pub width: i64,
pub height: i64,
pub duration: i64,
pub thumb: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VideoNote {
pub file_id: String,
pub file_unique_id: String,
pub length: i64,
pub duration: i64,
pub thumb: Option<PhotoSize>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Voice {
pub file_id: String,
pub file_unique_id: String,
pub duration: i64,
pub mime_type: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Contact {
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub user_id: Option<i64>,
pub vcard: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Dice {
pub emoji: String,
pub value: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PollOption {
pub text: String,
pub voter_count: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PollAnswer {
pub poll_id: String,
pub user: User,
pub option_ids: Vec<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Poll {
pub id: String,
pub question: String,
pub options: Vec<PollOption>,
pub total_voter_count: i64,
pub is_closed: bool,
pub is_anonymous: bool,
#[serde(rename = "type")]
pub type_: String,
pub allows_multiple_answers: bool,
pub correct_option_id: Option<i64>,
pub explanation: Option<String>,
pub explanation_entities: Option<Vec<MessageEntity>>,
pub open_period: Option<i64>,
pub close_date: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Location {
pub longitude: f64,
pub latitude: f64,
pub horizontal_accuracy: Option<f64>,
pub live_period: Option<i64>,
pub heading: Option<i64>,
pub proximity_alert_radius: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Venue {
pub location: Location,
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, Deserialize)]
pub struct WebAppData {
pub data: String,
pub button_text: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ProximityAlertTriggered {
pub traveler: User,
pub watcher: User,
pub distance: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MessageAutoDeleteTimerChanged {
pub message_auto_delete_time: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ForumTopicCreated {
pub name: String,
pub icon_color: i64,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ForumTopicClosed {
}
#[derive(Debug, Clone, Deserialize)]
pub struct ForumTopicEdited {
pub name: Option<String>,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ForumTopicReopened {
}
#[derive(Debug, Clone, Deserialize)]
pub struct GeneralForumTopicHidden {
}
#[derive(Debug, Clone, Deserialize)]
pub struct GeneralForumTopicUnhidden {
}
#[derive(Debug, Clone, Deserialize)]
pub struct UserShared {
pub request_id: i64,
pub user_id: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatShared {
pub request_id: i64,
pub chat_id: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct WriteAccessAllowed {
}
#[derive(Debug, Clone, Deserialize)]
pub struct VideoChatScheduled {
pub start_date: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VideoChatStarted {
}
#[derive(Debug, Clone, Deserialize)]
pub struct VideoChatEnded {
pub duration: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VideoChatParticipantsInvited {
pub users: Vec<User>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UserProfilePhotos {
pub total_count: i64,
pub photos: Vec<Vec<PhotoSize>>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct File {
pub file_id: String,
pub file_unique_id: String,
pub file_size: Option<i64>,
pub file_path: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebAppInfo {
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplyKeyboardMarkup {
pub keyboard: Vec<Vec<KeyboardButton>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_persistent: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resize_keyboard: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub one_time_keyboard: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_field_placeholder: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selective: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyboardButton {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_user: Option<KeyboardButtonRequestUser>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_chat: Option<KeyboardButtonRequestChat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_contact: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_location: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_poll: Option<KeyboardButtonPollType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub web_app: Option<WebAppInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyboardButtonRequestUser {
pub request_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_is_bot: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_is_premium: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyboardButtonRequestChat {
pub request_id: i64,
pub chat_is_channel: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_is_forum: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_has_username: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_is_created: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_administrator_rights: Option<ChatAdministratorRights>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bot_administrator_rights: Option<ChatAdministratorRights>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bot_is_member: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyboardButtonPollType {
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplyKeyboardRemove {
pub remove_keyboard: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub selective: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineKeyboardMarkup {
pub inline_keyboard: Vec<Vec<InlineKeyboardButton>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlineKeyboardButton {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub web_app: Option<WebAppInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub login_url: Option<LoginUrl>,
#[serde(skip_serializing_if = "Option::is_none")]
pub switch_inline_query: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub switch_inline_query_current_chat: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_game: Option<CallbackGame>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoginUrl {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub forward_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bot_username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_write_access: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CallbackQuery {
pub id: String,
pub from: 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(Debug, Clone, Serialize, Deserialize)]
pub struct ForceReply {
pub force_reply: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_field_placeholder: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selective: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatPhoto {
pub small_file_id: String,
pub small_file_unique_id: String,
pub big_file_id: String,
pub big_file_unique_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatInviteLink {
pub invite_link: String,
pub creator: User,
pub creates_join_request: bool,
pub is_primary: bool,
pub is_revoked: bool,
pub name: Option<String>,
pub expire_date: Option<i64>,
pub member_limit: Option<i64>,
pub pending_join_request_count: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatAdministratorRights {
pub is_anonymous: bool,
pub can_manage_chat: bool,
pub can_delete_messages: bool,
pub can_manage_video_chats: bool,
pub can_restrict_members: bool,
pub can_promote_members: bool,
pub can_change_info: bool,
pub can_invite_users: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_post_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_edit_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_pin_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_topics: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberOwner {
pub status: String,
pub user: User,
pub is_anonymous: bool,
pub custom_title: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberAdministrator {
pub status: String,
pub user: User,
pub can_be_edited: bool,
pub is_anonymous: bool,
pub can_manage_chat: bool,
pub can_delete_messages: bool,
pub can_manage_video_chats: bool,
pub can_restrict_members: bool,
pub can_promote_members: bool,
pub can_change_info: bool,
pub can_invite_users: bool,
pub can_post_messages: Option<bool>,
pub can_edit_messages: Option<bool>,
pub can_pin_messages: Option<bool>,
pub can_manage_topics: Option<bool>,
pub custom_title: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberMember {
pub status: String,
pub user: User,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberRestricted {
pub status: String,
pub user: User,
pub is_member: bool,
pub can_send_messages: bool,
pub can_send_audios: bool,
pub can_send_documents: bool,
pub can_send_photos: bool,
pub can_send_videos: bool,
pub can_send_video_notes: bool,
pub can_send_voice_notes: bool,
pub can_send_polls: bool,
pub can_send_other_messages: bool,
pub can_add_web_page_previews: bool,
pub can_change_info: bool,
pub can_invite_users: bool,
pub can_pin_messages: bool,
pub can_manage_topics: bool,
pub until_date: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberLeft {
pub status: String,
pub user: User,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberBanned {
pub status: String,
pub user: User,
pub until_date: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatMemberUpdated {
pub chat: Chat,
pub from: User,
pub date: i64,
pub old_chat_member: ChatMember,
pub new_chat_member: ChatMember,
pub invite_link: Option<ChatInviteLink>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatJoinRequest {
pub chat: Chat,
pub from: User,
pub user_chat_id: i64,
pub date: i64,
pub bio: Option<String>,
pub invite_link: Option<ChatInviteLink>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatPermissions {
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_audios: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_documents: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_photos: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_videos: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_video_notes: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_voice_notes: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_polls: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_send_other_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_add_web_page_previews: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_change_info: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_invite_users: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_pin_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_topics: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ChatLocation {
pub location: Location,
pub address: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ForumTopic {
pub message_thread_id: i64,
pub name: String,
pub icon_color: i64,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommand {
pub command: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeDefault {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeAllPrivateChats {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeAllGroupChats {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeAllChatAdministrators {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeChat {
pub chat_id: ChatId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeChatAdministrators {
pub chat_id: ChatId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommandScopeChatMember {
pub chat_id: ChatId,
pub user_id: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MenuButtonCommands {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MenuButtonWebApp {
pub text: String,
pub web_app: WebAppInfo,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MenuButtonDefault {
}
#[derive(Debug, Clone, Deserialize)]
pub struct ResponseParameters {
pub migrate_to_chat_id: Option<i64>,
pub retry_after: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputMediaPhoto {
pub media: 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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_spoiler: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputMediaVideo {
pub media: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb: Option<InputFile>,
#[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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supports_streaming: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_spoiler: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputMediaAnimation {
pub media: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb: Option<InputFile>,
#[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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_spoiler: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputMediaAudio {
pub media: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb: Option<InputFile>,
#[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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub performer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputMediaDocument {
pub media: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb: Option<InputFile>,
#[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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_content_type_detection: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Sticker {
pub file_id: String,
pub file_unique_id: String,
#[serde(rename = "type")]
pub type_: String,
pub width: i64,
pub height: i64,
pub is_animated: bool,
pub is_video: bool,
pub thumb: Option<PhotoSize>,
pub emoji: Option<String>,
pub set_name: Option<String>,
pub premium_animation: Option<File>,
pub mask_position: Option<MaskPosition>,
pub custom_emoji_id: Option<String>,
pub file_size: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct StickerSet {
pub name: String,
pub title: String,
pub sticker_type: String,
pub is_animated: bool,
pub is_video: bool,
pub stickers: Vec<Sticker>,
pub thumb: Option<PhotoSize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaskPosition {
pub point: String,
pub x_shift: f64,
pub y_shift: f64,
pub scale: f64,
}
#[derive(Debug, Clone, 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 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 = "Option::is_none")]
pub hide_url: Option<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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_height: Option<i64>,
#[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 caption_entities: Option<Vec<MessageEntity>>,
#[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(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultGif {
pub id: String,
pub gif_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gif_duration: Option<i64>,
pub thumb_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(Debug, Clone, Serialize, Deserialize)]
pub struct InlineQueryResultMpeg4Gif {
pub id: String,
pub mpeg4_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mpeg4_duration: Option<i64>,
pub thumb_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(Debug, Clone, Serialize, Deserialize)]
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 caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_duration: Option<i64>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub performer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_duration: Option<i64>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub voice_duration: Option<i64>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<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<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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<i64>,
}
#[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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub heading: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proximity_alert_radius: Option<i64>,
#[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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<i64>,
}
#[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<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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<i64>,
}
#[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<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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb_height: Option<i64>,
}
#[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<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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(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<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption_entities: Option<Vec<MessageEntity>>,
#[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(Debug, Clone, Serialize, Deserialize)]
pub struct InputTextMessageContent {
pub message_text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parse_mode: Option<ParseMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<Vec<MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_web_page_preview: Option<bool>,
}
#[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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub heading: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proximity_alert_radius: Option<i64>,
}
#[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,
pub provider_token: String,
pub currency: String,
pub prices: Vec<LabeledPrice>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tip_amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggested_tip_amounts: Option<Vec<i64>>,
#[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<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo_height: Option<i64>,
#[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, 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, Deserialize)]
pub struct SentWebAppMessage {
pub inline_message_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LabeledPrice {
pub label: String,
pub amount: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Invoice {
pub title: String,
pub description: String,
pub start_parameter: String,
pub currency: String,
pub total_amount: i64,
}
#[derive(Debug, Clone, Deserialize)]
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(Debug, Clone, Deserialize)]
pub struct OrderInfo {
pub name: Option<String>,
pub phone_number: Option<String>,
pub email: Option<String>,
pub shipping_address: Option<ShippingAddress>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShippingOption {
pub id: String,
pub title: String,
pub prices: Vec<LabeledPrice>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct SuccessfulPayment {
pub currency: String,
pub total_amount: i64,
pub invoice_payload: String,
pub shipping_option_id: Option<String>,
pub order_info: Option<OrderInfo>,
pub telegram_payment_charge_id: String,
pub provider_payment_charge_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ShippingQuery {
pub id: String,
pub from: User,
pub invoice_payload: String,
pub shipping_address: ShippingAddress,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PreCheckoutQuery {
pub id: String,
pub from: User,
pub currency: String,
pub total_amount: i64,
pub invoice_payload: String,
pub shipping_option_id: Option<String>,
pub order_info: Option<OrderInfo>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PassportData {
pub data: Vec<EncryptedPassportElement>,
pub credentials: EncryptedCredentials,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PassportFile {
pub file_id: String,
pub file_unique_id: String,
pub file_size: i64,
pub file_date: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EncryptedPassportElement {
#[serde(rename = "type")]
pub type_: String,
pub data: Option<String>,
pub phone_number: Option<String>,
pub email: Option<String>,
pub files: Option<Vec<PassportFile>>,
pub front_side: Option<PassportFile>,
pub reverse_side: Option<PassportFile>,
pub selfie: Option<PassportFile>,
pub translation: Option<Vec<PassportFile>>,
pub hash: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct EncryptedCredentials {
pub data: String,
pub hash: String,
pub secret: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorDataField {
#[serde(rename = "type")]
pub type_: String,
pub field_name: String,
pub data_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorFrontSide {
#[serde(rename = "type")]
pub type_: String,
pub file_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorReverseSide {
#[serde(rename = "type")]
pub type_: String,
pub file_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorSelfie {
#[serde(rename = "type")]
pub type_: String,
pub file_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorFile {
#[serde(rename = "type")]
pub type_: String,
pub file_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorFiles {
#[serde(rename = "type")]
pub type_: String,
pub file_hashes: Vec<String>,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorTranslationFile {
#[serde(rename = "type")]
pub type_: String,
pub file_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorTranslationFiles {
#[serde(rename = "type")]
pub type_: String,
pub file_hashes: Vec<String>,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PassportElementErrorUnspecified {
#[serde(rename = "type")]
pub type_: String,
pub element_hash: String,
pub message: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Game {
pub title: String,
pub description: String,
pub photo: Vec<PhotoSize>,
pub text: Option<String>,
pub text_entities: Option<Vec<MessageEntity>>,
pub animation: Option<Animation>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallbackGame {
}
#[derive(Debug, Clone, Deserialize)]
pub struct GameHighScore {
pub position: i64,
pub user: User,
pub score: i64,
}