Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
P0lunin 2019-09-04 09:08:19 +03:00
commit d18f7f9666
40 changed files with 209 additions and 105 deletions

View file

@ -1,8 +1,7 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct AnswerPreCheckoutQuery { pub struct AnswerPreCheckoutQuery {
pub pre_checkout_query_id: String, pub pre_checkout_query_id: String,
pub ok: bool, pub ok: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>, pub error_message: Option<String>,
} }

View file

@ -1,11 +1,11 @@
use serde::Deserialize;
use crate::core::types::ShippingOption; use crate::core::types::ShippingOption;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct AnswerShippingQuery { pub struct AnswerShippingQuery {
pub shipping_query_id: String, pub shipping_query_id: String,
pub ok: bool, pub ok: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping_options: Option<Vec<ShippingOption>>, pub shipping_options: Option<Vec<ShippingOption>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>, pub error_message: Option<String>,
} }

18
src/core/types/audio.rs Normal file
View file

@ -0,0 +1,18 @@
use crate::core::types::PhotoSize;
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Audio {
pub file_id: String,
pub duration: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub performer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mime_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumb: Option<PhotoSize>
}

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// This object represents an incoming callback query from a callback button in an inline keyboard. /// This object represents an incoming callback query from a callback button in an inline keyboard.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct CallbackQuery { pub struct CallbackQuery {

View file

@ -1,20 +1,72 @@
use serde::Deserialize; use crate::core::types::{ChatPermissions, ChatPhoto, Message, Integer};
use crate::core::types::{ChatPermissions, ChatPhoto, Message};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Chat { pub struct Chat {
pub id: i64, pub id: Integer,
pub chat_type: String, #[serde(flatten)]
pub title: Option<String>, pub type_: ChatType,
pub username: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub photo: Option<ChatPhoto>, pub photo: Option<ChatPhoto>,
pub description: Option<String>, }
pub invite_link: Option<String>,
pub pinned_message: Option<Box<Message>>,
pub permissions: Option<ChatPermissions>, #[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub sticker_set_name: Option<String>, #[serde(rename_all = "snake_case")]
pub can_set_sticker_set: Option<bool>, #[serde(untagged)]
pub enum ChatType {
NotPrivate {
title: Option<String>,
#[serde(flatten)]
type_: NotPrivateChatType,
description: Option<String>,
invite_link: Option<String>,
pinned_message: Option<Box<Message>>
},
Private {
username: Option<String>,
first_name: Option<String>,
last_name: Option<String>
}
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum NotPrivateChatType {
Channel {
username: Option<String>
},
Group {
permissions: Option<ChatPermissions>
},
Supergroup {
username: Option<String>,
sticker_set_name: Option<String>,
can_set_sticker_set: Option<bool>,
permissions: Option<ChatPermissions>
}
}
#[test]
fn test_chat_de() {
use serde_json::from_str;
assert_eq!(
Chat {
id: 0,
type_: ChatType::NotPrivate {
title: None,
type_: NotPrivateChatType::Channel {
username: Some("channelname".into())
},
description: None,
invite_link: None,
pinned_message: None
},
photo: None,
},
from_str(r#"{"id":0,"type":"channel","username":"channelname"}"#).unwrap()
);
} }

View file

@ -1,4 +1,6 @@
use serde::Deserialize; use crate::core::types::{
User, ChatMemberStatus, Integer
};
/// This object contains information about one member of the chat. /// This object contains information about one member of the chat.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct ChatPermissions { pub struct ChatPermissions {
pub can_send_messages: Option<bool>, pub can_send_messages: Option<bool>,

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct ChatPhoto { pub struct ChatPhoto {
pub small_file_id: String, pub small_file_id: String,

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::user::User; use crate::core::types::user::User;
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]

View file

@ -1,10 +1,11 @@
use crate::core::types::PhotoSize; use crate::core::types::{PhotoSize, UnsignedInteger};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Document { pub struct Document {
pub file_id: String, pub file_id: String,
pub thumb: Option<PhotoSize>, pub thumb: Option<PhotoSize>,
pub file_name: Option<String>, pub file_name: Option<String>,
pub mime_type: Option<String>, pub mime_type: Option<String>,
pub file_size: Option<i64>, pub file_size: Option<UnsignedInteger>,
} }

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// Upon receiving a message with this object, Telegram clients will /// Upon receiving a message with this object, Telegram clients will
/// display a reply interface to the user (act as if the user has /// display a reply interface to the user (act as if the user has
/// selected the bots message and tapped Reply'). This can be /// selected the bots message and tapped Reply'). This can be

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// This object represents one button of an inline keyboard. /// This object represents one button of an inline keyboard.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct InlineKeyboardButton { pub struct InlineKeyboardButton {

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// This object represents an inline keyboard that appears right next to the message it belongs to. /// This object represents an inline keyboard that appears right next to the message it belongs to.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct InlineKeyboardMarkup { pub struct InlineKeyboardMarkup {

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Hash, PartialEq, Eq)] #[derive(Debug, Hash, PartialEq, Eq)]
pub enum InputFile { pub enum InputFile {
File(std::path::PathBuf), File(std::path::PathBuf),

View file

@ -1,4 +1,3 @@
use serde::Deserialize;
use crate::core::types::{InputFile, ParseMode}; use crate::core::types::{InputFile, ParseMode};
// TODO: should variants use new-type? // TODO: should variants use new-type?

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct Invoice { pub struct Invoice {
pub title: String, pub title: String,

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// This object represents one button of the reply keyboard. /// This object represents one button of the reply keyboard.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct KeyboardButton { pub struct KeyboardButton {

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct LabeledPrice { pub struct LabeledPrice {
pub label: String, pub label: String,

View file

@ -1,9 +1,10 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct LoginUrl { pub struct LoginUrl {
url: String, url: String,
#[serde(skip_serializing_if = "Option::is_none")]
forward_text: Option<String>, forward_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
bot_username: Option<String>, bot_username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
request_write_access: Option<bool>, request_write_access: Option<bool>,
} }

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct MaskPosition { pub struct MaskPosition {
pub point: String, pub point: String,

View file

@ -1,12 +1,10 @@
// use serde::Deserialize;
use crate::core::types::{ use crate::core::types::{
Animation, Audio, Chat, Contact, Document, Game, InlineKeyboardMarkup, Invoice, Location, Animation, Audio, Chat, Contact, Document, Game, InlineKeyboardMarkup, Invoice, Location,
MessageEntity, PassportData, PhotoSize, Poll, Sticker, SuccessfulPayment, User, Venue, Video, MessageEntity, PassportData, PhotoSize, Poll, Sticker, SuccessfulPayment, User, Venue, Video,
VideoNote, Voice, VideoNote, Voice,
}; };
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Message { pub struct Message {
pub message_id: i64, pub message_id: i64,
pub from: Option<Box<User>>, pub from: Option<Box<User>>,

View file

@ -1,6 +1,7 @@
use crate::core::types::User; use crate::core::types::User;
#[derive(Deserialize, Debug, PartialEq, Hash, Eq)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct MessageEntity { pub struct MessageEntity {
#[serde(flatten)] #[serde(flatten)]
pub kind: MessageEntityKind, pub kind: MessageEntityKind,
@ -8,7 +9,8 @@ pub struct MessageEntity {
pub length: usize, pub length: usize,
} }
#[derive(Deserialize, Debug, PartialEq, Hash, Eq)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
#[serde(tag = "type")] #[serde(tag = "type")]
pub enum MessageEntityKind { pub enum MessageEntityKind {

View file

@ -1,22 +1,46 @@
use self::not_implemented_types::*; use self::not_implemented_types::*;
pub type Integer = i32;
pub type UnsignedInteger = u32;
pub use self::{ pub use self::{
answer_pre_checkout_query::AnswerPreCheckoutQuery, answer_shipping_query::AnswerShippingQuery, answer_pre_checkout_query::AnswerPreCheckoutQuery,
chat::Chat, chat_permissions::ChatPermissions, chat_photo::ChatPhoto, document::Document, answer_shipping_query::AnswerShippingQuery,
invoice::Invoice, label_price::LabeledPrice, message::Message, message_entity::MessageEntity, audio::Audio,
order_info::OrderInfo, pre_checkout_query::PreCheckoutQuery, send_invoice::SendInvoice, chat::Chat,
shipping_address::ShippingAddress, shipping_option::ShippingOption, chat_permissions::ChatPermissions,
shipping_query::ShippingQuery, sticker::Sticker, successful_payment::SuccessfulPayment, chat_photo::ChatPhoto,
chat_member::ChatMember,
document::Document,
invoice::Invoice,
label_price::LabeledPrice,
message::Message,
message_entity::MessageEntity,
order_info::OrderInfo,
photo_size::PhotoSize,
pre_checkout_query::PreCheckoutQuery,
send_invoice::SendInvoice,
shipping_address::ShippingAddress,
shipping_option::ShippingOption,
shipping_query::ShippingQuery,
sticker::Sticker,
successful_payment::SuccessfulPayment,
user::User, user::User,
input_file::InputFile, input_file::InputFile,
input_media::InputMedia, input_media::InputMedia,
parse_mode::ParseMode, parse_mode::ParseMode,
video::Video
}; };
mod answer_pre_checkout_query; mod answer_pre_checkout_query;
mod answer_shipping_query; mod answer_shipping_query;
mod audio;
mod chat; mod chat;
mod chat_permissions; mod chat_permissions;
mod chat_photo; mod chat_photo;
mod chat_member;
mod document; mod document;
mod invoice; mod invoice;
mod label_price; mod label_price;
@ -24,6 +48,7 @@ mod message;
mod message_entity; mod message_entity;
mod not_implemented_types; mod not_implemented_types;
mod order_info; mod order_info;
mod photo_size;
mod pre_checkout_query; mod pre_checkout_query;
mod send_invoice; mod send_invoice;
mod shipping_address; mod shipping_address;
@ -35,3 +60,4 @@ mod user;
mod input_file; mod input_file;
mod input_media; mod input_media;
mod parse_mode; mod parse_mode;
mod video;

View file

@ -1,41 +1,35 @@
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct PhotoSize;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)]
pub struct Location; pub struct Location;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct InlineKeyboardMarkup; pub struct InlineKeyboardMarkup;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct PassportData; pub struct PassportData;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Poll; pub struct Poll;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Animation; pub struct Animation;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Audio;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)]
pub struct Game; pub struct Game;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Contact; pub struct Contact;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Video;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)]
pub struct VideoNote; pub struct VideoNote;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Venue; pub struct Venue;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Voice; pub struct Voice;
#[derive(Debug, Deserialize, Serialize, PartialEq, Hash, Eq)] #[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct MaskPosition; pub struct MaskPosition;
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct ChatMemberStatus;

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::ShippingAddress; use crate::core::types::ShippingAddress;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -0,0 +1,10 @@
use crate::core::types::{Integer, UnsignedInteger};
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct PhotoSize {
pub file_id: String,
pub width: Integer,
pub heigth: Integer,
pub file_size: Option<UnsignedInteger>
}

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::{OrderInfo, User}; use crate::core::types::{OrderInfo, User};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// This object represents a custom keyboard with reply options. /// This object represents a custom keyboard with reply options.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct ReplyKeyboardMarkup { pub struct ReplyKeyboardMarkup {

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
/// Upon receiving a message with this object, Telegram clients will remove /// Upon receiving a message with this object, Telegram clients will remove
/// the current custom keyboard and display the default letter-keyboard. /// the current custom keyboard and display the default letter-keyboard.
/// By default, custom keyboards are displayed until a new keyboard is sent /// By default, custom keyboards are displayed until a new keyboard is sent

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct ResponseParameters { pub struct ResponseParameters {
migrate_to_chat_id: Option<i64>, migrate_to_chat_id: Option<i64>,

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct ShippingAddress { pub struct ShippingAddress {
pub country_code: String, pub country_code: String,

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::LabeledPrice; use crate::core::types::LabeledPrice;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::{ShippingAddress, User}; use crate::core::types::{ShippingAddress, User};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::{MaskPosition, PhotoSize}; use crate::core::types::{MaskPosition, PhotoSize};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::Sticker; use crate::core::types::Sticker;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
use crate::core::types::OrderInfo; use crate::core::types::OrderInfo;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]

View file

@ -1,5 +1,3 @@
use serde::Deserialize;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)] #[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct User { pub struct User {
pub id: i64, pub id: i64,

13
src/core/types/venue.rs Normal file
View file

@ -0,0 +1,13 @@
use crate::core::types::Location;
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Venue {
pub location: Location,
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>
}

13
src/core/types/video.rs Normal file
View file

@ -0,0 +1,13 @@
use crate::core::types::{PhotoSize, UnsignedInteger};
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Video {
pub file_id: String,
pub width: UnsignedInteger,
pub height: UnsignedInteger,
pub duration: UnsignedInteger,
pub thumb: Option<PhotoSize>,
pub mime_type: Option<String>,
pub file_size: Option<UnsignedInteger>
}

View file

@ -0,0 +1,24 @@
use serde::Deserialize;
/// Contains information about the current status of a webhook.
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
pub struct WebhookInfo {
/// Webhook URL, may be empty if webhook is not set up
pub url: String,
/// True, if a custom certificate was provided for webhook certificate checks
pub has_custom_certificate: bool,
/// Number of updates awaiting delivery
pub pending_update_count: u32,
/// Optional. Unix time for the most recent error that happened when trying
/// to deliver an update via webhook
pub last_error_date: Option<u64>,
/// Optional. Error message in human-readable format for the most recent
/// error that happened when trying to deliver an update via webhook
pub last_error_message: Option<String>,
/// Optional. Maximum allowed number of simultaneous HTTPS connections to
/// the webhook for update delivery
pub max_connections: Option<u32>,
/// Optional. A list of update types the bot is subscribed to. Defaults
/// to all update types
pub allowed_updates: Option<Vec<String>>,
}