Merge pull request #864 from Olegt0rr/fix-telegram-serialization

Telegram struct serializing similar to original (skip empty/defaults)
This commit is contained in:
Waffle Maybe 2023-07-29 09:37:06 +00:00 committed by GitHub
commit 556b14eb04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 93 additions and 10 deletions

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
/// This object represents a bot command.
///
/// [The official docs](https://core.telegram.org/bots/api#botcommand).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct BotCommand {
/// Text of the command, 1-32 characters.

View file

@ -8,5 +8,6 @@ use serde::{Deserialize, Serialize};
/// Use [@Botfather] to set up your game.
///
/// [@Botfather]: https://t.me/botfather
#[serde_with_macros::skip_serializing_none]
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct CallbackGame {}

View file

@ -1,6 +1,7 @@
use serde::{Deserialize, Serialize};
/// Represents the rights of an administrator in a chat.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ChatAdministratorRights {
/// `true`, if the user's presence in the chat is hidden

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::User;
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ChatInviteLink {
/// The invite link. If the link was created by another chat administrator,

View file

@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
use crate::types::{Chat, ChatInviteLink, User};
/// Represents a join request sent to a chat.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ChatJoinRequest {
/// Chat to which the request was sent

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::Location;
/// Represents a location to which a chat is connected.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ChatLocation {
/// The location to which the supergroup is connected. Can't be a live

View file

@ -7,6 +7,7 @@ use crate::types::{UntilDate, User};
/// This object contains information about one member of the chat.
///
/// [The official docs](https://core.telegram.org/bots/api#chatmember).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ChatMember {
/// Information about the user.
@ -32,6 +33,7 @@ pub enum ChatMemberKind {
}
/// Owner of the group. This struct is part of the [`ChatMemberKind`] enum.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Owner {
/// Custom title for this user.
@ -43,6 +45,7 @@ pub struct Owner {
/// Administrator of the group. This struct is part of the [`ChatMemberKind`]
/// enum.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Administrator {
/// Custom title for this user.
@ -104,6 +107,7 @@ pub struct Administrator {
/// User, restricted in the group. This struct is part of the [`ChatMemberKind`]
/// enum.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Restricted {
/// Date when restrictions will be lifted for this user.
@ -148,6 +152,7 @@ pub struct Restricted {
/// User that was banned in the chat and can't return to it or view chat
/// messages. This struct is part of the [`ChatMemberKind`] enum.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Banned {
/// Date when restrictions will be lifted for this user.

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::{Chat, ChatInviteLink, ChatMember, User};
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ChatMemberUpdated {
/// Chat the user belongs to

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
/// This object represents a chat photo.
///
/// [The official docs](https://core.telegram.org/bots/api#chatphoto).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ChatPhoto {
/// A file identifier of small (160x160) chat photo. This file_id can be

View file

@ -6,6 +6,7 @@ use super::PassportFile;
/// shared with the bot by the user.
///
/// [The official docs](https://core.telegram.org/bots/api#encryptedpassportelement).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct EncryptedPassportElement {
/// Base64-encoded element hash for using in

View file

@ -5,6 +5,7 @@ use crate::types::user::User;
/// This object represents one row of the high scores table for a game.
///
/// [The official docs](https://core.telegram.org/bots/api#gamehighscore).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct GameHighScore {
/// Position in high score table for the game.

View file

@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
/// This object represents one button of an inline keyboard.
///
/// [The official docs](https://core.telegram.org/bots/api#inlinekeyboardbutton).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct InlineKeyboardButton {
/// Label text on the button.

View file

@ -11,6 +11,7 @@ use crate::types::InlineKeyboardButton;
/// [The official docs](https://core.telegram.org/bots/api#inlinekeyboardmarkup).
///
/// [inline keyboard]: https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, Default)]
pub struct InlineKeyboardMarkup {
/// Array of button rows, each represented by an array of

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
/// This object contains basic information about an invoice.
///
/// [The official docs](https://core.telegram.org/bots/api#invoice).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Invoice {
/// Product name.

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
/// This object represents a portion of the price for goods or services.
///
/// [The official docs](https://core.telegram.org/bots/api#labeledprice).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct LabeledPrice {
/// Portion label.

View file

@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::Seconds;
/// This object represents a point on the map.
#[serde_with_macros::skip_serializing_none]
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Location {
/// Longitude as defined by sender.

View file

@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
/// default.
///
/// [The official docs](https://core.telegram.org/bots/api#maskposition).
#[serde_with_macros::skip_serializing_none]
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MaskPosition {
/// The part of the face relative to which the mask should be placed. One

View file

@ -7,6 +7,7 @@ use crate::types::User;
/// Returned only in [`GetMe`].
///
/// [`GetMe`]: crate::payloads::GetMe
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Me {
#[serde(flatten)]

View file

@ -17,6 +17,7 @@ use crate::types::{
/// This object represents a message.
///
/// [The official docs](https://core.telegram.org/bots/api#message).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Message {
/// Unique message identifier inside this chat.
@ -121,19 +122,20 @@ pub struct MessageCommon {
/// `true`, if the message is sent to a forum topic.
// FIXME: `is_topic_message` is included even in service messages, like ForumTopicCreated.
// more this to `Message`
#[serde(default)]
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub is_topic_message: bool,
/// `true`, if the message is a channel post that was automatically
/// forwarded to the connected discussion group.
#[serde(default)]
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub is_automatic_forward: bool,
/// `true`, if the message can't be forwarded.
#[serde(default)]
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub has_protected_content: bool,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageNewChatMembers {
/// New members that were added to the group or supergroup and
@ -142,6 +144,7 @@ pub struct MessageNewChatMembers {
pub new_chat_members: Vec<User>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageLeftChatMember {
/// A member was removed from the group, information about them (this
@ -149,30 +152,35 @@ pub struct MessageLeftChatMember {
pub left_chat_member: User,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageNewChatTitle {
/// A chat title was changed to this value.
pub new_chat_title: String,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageNewChatPhoto {
/// A chat photo was change to this value.
pub new_chat_photo: Vec<PhotoSize>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct MessageDeleteChatPhoto {
/// Service message: the chat photo was deleted.
pub delete_chat_photo: True,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct MessageGroupChatCreated {
/// Service message: the group has been created.
pub group_chat_created: True,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct MessageSupergroupChatCreated {
/// Service message: the supergroup has been created. This field cant
@ -183,6 +191,7 @@ pub struct MessageSupergroupChatCreated {
pub supergroup_chat_created: True,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct MessageChannelChatCreated {
/// Service message: the channel has been created. This field cant be
@ -193,6 +202,7 @@ pub struct MessageChannelChatCreated {
pub channel_chat_created: True,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageMessageAutoDeleteTimerChanged {
/// Service message: auto-delete timer settings changed in the chat.
@ -227,6 +237,7 @@ pub enum ChatMigration {
},
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessagePinned {
/// Specified message was pinned. Note that the Message object in this
@ -236,6 +247,7 @@ pub struct MessagePinned {
pub pinned: Box<Message>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageInvoice {
/// Message is an invoice for a [payment], information about the
@ -246,6 +258,7 @@ pub struct MessageInvoice {
pub invoice: Invoice,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageSuccessfulPayment {
/// Message is a service message about a successful payment,
@ -255,6 +268,7 @@ pub struct MessageSuccessfulPayment {
pub successful_payment: SuccessfulPayment,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageConnectedWebsite {
/// The domain name of the website on which the user has logged in.
@ -264,6 +278,7 @@ pub struct MessageConnectedWebsite {
pub connected_website: String,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessagePassportData {
/// Telegram Passport data.
@ -271,6 +286,7 @@ pub struct MessagePassportData {
}
/// Information about forwarded message.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Forward {
/// Date the original message was sent in Unix time.
@ -343,6 +359,7 @@ pub enum MediaKind {
Migration(ChatMigration),
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaAnimation {
/// Message is an animation, information about the animation. For
@ -355,7 +372,7 @@ pub struct MediaAnimation {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
/// `true`, if the message media is covered by a spoiler animation.
@ -375,7 +392,7 @@ pub struct MediaAudio {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
/// The unique identifier of a media message group this message belongs
@ -383,6 +400,7 @@ pub struct MediaAudio {
pub media_group_id: Option<String>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaContact {
/// Message is a shared contact, information about the contact.
@ -400,7 +418,7 @@ pub struct MediaDocument {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default)]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
/// The unique identifier of a media message group this message belongs
@ -408,6 +426,7 @@ pub struct MediaDocument {
pub media_group_id: Option<String>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaGame {
/// Message is a game, information about the game. [More
@ -417,6 +436,7 @@ pub struct MediaGame {
pub game: Game,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaLocation {
/// Message is a shared location, information about the location.
@ -434,7 +454,7 @@ pub struct MediaPhoto {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
/// `true`, if the message media is covered by a spoiler animation.
@ -446,18 +466,21 @@ pub struct MediaPhoto {
pub media_group_id: Option<String>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaPoll {
/// Message is a native poll, information about the poll.
pub poll: Poll,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaSticker {
/// Message is a sticker, information about the sticker.
pub sticker: Sticker,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaText {
/// For text messages, the actual UTF-8 text of the message, 0-4096
@ -466,7 +489,7 @@ pub struct MediaText {
/// For text messages, special entities like usernames, URLs, bot
/// commands, etc. that appear in the text.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub entities: Vec<MessageEntity>,
}
@ -481,7 +504,7 @@ pub struct MediaVideo {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
/// `true`, if the message media is covered by a spoiler animation.
@ -493,6 +516,7 @@ pub struct MediaVideo {
pub media_group_id: Option<String>,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MediaVideoNote {
/// Message is a [video note], information about the video message.
@ -512,7 +536,7 @@ pub struct MediaVoice {
/// For messages with a caption, special entities like usernames, URLs,
/// bot commands, etc. that appear in the caption.
#[serde(default = "Vec::new")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub caption_entities: Vec<MessageEntity>,
}
@ -523,12 +547,14 @@ pub struct MediaVenue {
// Note: for backward compatibility telegram also sends `location` field, but we ignore it
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageDice {
/// Message is a dice with random value from 1 to 6.
pub dice: Dice,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageProximityAlertTriggered {
/// Service message. A user in the chat triggered another user's proximity
@ -536,6 +562,7 @@ pub struct MessageProximityAlertTriggered {
pub proximity_alert_triggered: ProximityAlertTriggered,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageWriteAccessAllowed {
/// Service message: the user allowed the bot added to the attachment menu
@ -543,66 +570,77 @@ pub struct MessageWriteAccessAllowed {
pub write_access_allowed: WriteAccessAllowed,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageForumTopicCreated {
/// Service message: forum topic created.
pub forum_topic_created: ForumTopicCreated,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageForumTopicEdited {
/// Service message: forum topic edited.
pub forum_topic_edited: ForumTopicEdited,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageForumTopicClosed {
/// Service message: forum topic closed.
pub forum_topic_closed: ForumTopicClosed,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageForumTopicReopened {
/// Service message: forum topic reopened.
pub forum_topic_reopened: ForumTopicReopened,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageGeneralForumTopicHidden {
/// Service message: the 'General' forum topic hidden.
pub general_forum_topic_hidden: GeneralForumTopicHidden,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageGeneralForumTopicUnhidden {
/// Service message: the 'General' forum topic unhidden.
pub general_forum_topic_unhidden: GeneralForumTopicUnhidden,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageVideoChatScheduled {
/// Service message: video chat scheduled
pub video_chat_scheduled: VideoChatScheduled,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageVideoChatStarted {
/// Service message: video chat started.
pub video_chat_started: VideoChatStarted,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageVideoChatEnded {
/// Service message: video chat ended.
pub video_chat_ended: VideoChatEnded,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageVideoChatParticipantsInvited {
/// Service message: new participants invited to a video chat.
pub video_chat_participants_invited: VideoChatParticipantsInvited,
}
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MessageWebAppData {
/// Service message: data sent by a Web App.

View file

@ -4,6 +4,7 @@ use crate::types::Seconds;
/// This object represents a service message about a change in auto-delete timer
/// settings.
#[serde_with_macros::skip_serializing_none]
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct MessageAutoDeleteTimerChanged {
/// New auto-delete time for messages in the chat

View file

@ -9,6 +9,7 @@ use crate::types::{User, UserId};
/// For example, hashtags, usernames, URLs, etc.
///
/// [The official docs](https://core.telegram.org/bots/api#messageentity).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct MessageEntity {
#[serde(flatten)]

View file

@ -5,6 +5,7 @@ use crate::types::ShippingAddress;
/// This object represents information about an order.
///
/// [The official docs](https://core.telegram.org/bots/api#orderinfo).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, Default)]
pub struct OrderInfo {
/// User's name.

View file

@ -6,6 +6,7 @@ use super::{EncryptedCredentials, EncryptedPassportElement};
/// user.
///
/// [The official docs](https://core.telegram.org/bots/api#passportdata).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct PassportData {
/// Array with information about documents and other Telegram Passport

View file

@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
/// submitted that should be resolved by the user.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerror).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementError {
/// Error message.
@ -73,6 +74,7 @@ pub enum PassportElementErrorKind {
/// The error is considered resolved when the field's value changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrordatafield).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorDataField {
/// The section of the user's Telegram Passport which has the error.
@ -127,6 +129,7 @@ impl PassportElementErrorDataField {
/// document changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorfrontside).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorFrontSide {
/// The section of the user's Telegram Passport which has the issue.
@ -166,6 +169,7 @@ impl PassportElementErrorFrontSide {
/// document changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorreverseside).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorReverseSide {
/// The section of the user's Telegram Passport which has the issue.
@ -204,6 +208,7 @@ impl PassportElementErrorReverseSide {
/// The error is considered resolved when the file with the selfie changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorselfie).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorSelfie {
/// The section of the user's Telegram Passport which has the issue.
@ -242,6 +247,7 @@ impl PassportElementErrorSelfie {
/// changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorfile).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorFile {
/// The section of the user's Telegram Passport which has the issue.
@ -280,6 +286,7 @@ impl PassportElementErrorFile {
/// changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorfiles).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorFiles {
/// The section of the user's Telegram Passport which has the issue.
@ -318,6 +325,7 @@ impl PassportElementErrorFiles {
/// The error is considered resolved when the file changes.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrortranslationfile).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorTranslationFile {
/// Type of element of the user's Telegram Passport which has the
@ -357,6 +365,7 @@ impl PassportElementErrorTranslationFile {
/// change.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrortranslationfiles).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorTranslationFiles {
/// Type of element of the user's Telegram Passport which has the issue
@ -394,6 +403,7 @@ impl PassportElementErrorTranslationFiles {
/// The error is considered resolved when new data is added.
///
/// [The official docs](https://core.telegram.org/bots/api#passportelementerrorunspecified).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub struct PassportElementErrorUnspecified {
/// Type of element of the user's Telegram Passport which has the

View file

@ -10,6 +10,7 @@ use crate::types::FileMeta;
/// don't exceed 10MB.
///
/// [The official docs](https://core.telegram.org/bots/api#passportfile).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, Deref)]
pub struct PassportFile {
/// Metadata of the passport file.

View file

@ -1,6 +1,7 @@
use crate::types::User;
use serde::{Deserialize, Serialize};
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct PollAnswer {
/// Unique poll identifier.

View file

@ -4,6 +4,7 @@ use crate::types::User;
/// This object represents the content of a service message, sent whenever a
/// user in the chat triggers a proximity alert set by another user.
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ProximityAlertTriggered {
/// User that triggered the alert.

View file

@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
/// This object represents a shipping address.
///
/// [The official docs](https://core.telegram.org/bots/api#shippingaddress).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ShippingAddress {
/// ISO 3166-1 alpha-2 country code.

View file

@ -5,6 +5,7 @@ use crate::types::LabeledPrice;
/// This object represents one shipping option.
///
/// [The official docs](https://core.telegram.org/bots/api#shippingoption).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ShippingOption {
/// Shipping option identifier.

View file

@ -5,6 +5,7 @@ use crate::types::{ShippingAddress, User};
/// This object contains information about an incoming shipping query.
///
/// [The official docs](https://core.telegram.org/bots/api#shippingquery).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct ShippingQuery {
/// Unique query identifier.

View file

@ -7,6 +7,7 @@ use crate::types::{PhotoSize, Sticker, StickerFormat, StickerType};
/// This object represents a sticker set.
///
/// [The official docs](https://core.telegram.org/bots/api#stickerset).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct StickerSet {
/// Sticker set name.

View file

@ -12,6 +12,7 @@ use crate::types::{
/// [The official docs](https://core.telegram.org/bots/api#update).
///
/// [object]: https://core.telegram.org/bots/api#available-types
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Update {
/// The updates unique identifier. Update identifiers start from a certain

View file

@ -5,6 +5,7 @@ use crate::types::PhotoSize;
/// This object represent a user's profile pictures.
///
/// [The official docs](https://core.telegram.org/bots/api#userprofilephotos).
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct UserProfilePhotos {
/// Total number of profile pictures the target user has.