Move ChatId and ChatAction to types::

This commit is contained in:
Waffle 2019-10-11 15:24:24 +03:00
parent ca6b4a4628
commit 2bd5919a53
29 changed files with 126 additions and 110 deletions

View file

@ -1,14 +1,14 @@
use crate::{
bot::Bot,
requests::{
AnswerPreCheckoutQuery, AnswerShippingQuery, ChatAction, ChatId,
AnswerPreCheckoutQuery, AnswerShippingQuery,
EditMessageLiveLocation, ForwardMessage, GetFile, GetMe,
KickChatMember, PinChatMessage, PromoteChatMember, RestrictChatMember,
SendAudio, SendChatAction, SendContact, SendLocation, SendMediaGroup,
SendMessage, SendPhoto, SendPoll, SendVenue, SendVideoNote, SendVoice,
StopMessageLiveLocation, UnbanChatMember, UnpinChatMessage,
},
types::{ChatPermissions, InputFile, InputMedia},
types::{ChatPermissions, InputFile, InputMedia, ChatAction, ChatId},
};
/// Telegram functions

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
#[derive(Debug, Clone, Serialize)]

View file

@ -3,8 +3,8 @@ use std::path::PathBuf;
use reqwest::r#async::multipart::Form;
use crate::{
requests::{utils, ChatId},
types::{InputMedia, ParseMode},
requests::utils,
types::{InputMedia, ParseMode, ChatId},
};
/// This is a convenient struct that builds `reqwest::r#async::multipart::Form`

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::Message,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message}
};
#[derive(Debug, Clone, Serialize)]

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::Chat,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Chat}
};
/// Use this method to get up to date information about the chat

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::True,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, True}
};
/// Use this method to kick a user from a group, a supergroup or a channel. In

View file

@ -20,7 +20,7 @@ pub use self::{
restrict_chat_member::RestrictChatMember,
send_animation::SendAnimation,
send_audio::SendAudio,
send_chat_action::{ChatAction, SendChatAction},
send_chat_action::SendChatAction,
send_contact::SendContact,
send_document::SendDocument,
send_location::SendLocation,
@ -58,43 +58,6 @@ pub struct RequestContext<'a> {
pub token: &'a str,
}
/// Unique identifier for the target chat or username of the target channel (in
/// the format @channelusername)
#[derive(Debug, Display, Serialize, From, PartialEq, Eq, Clone)]
#[serde(untagged)]
pub enum ChatId {
/// chat identifier
#[display(fmt = "{}", _0)]
Id(i64),
/// _channel_ username (in the format @channelusername)
#[display(fmt = "{}", _0)]
ChannelUsername(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn chat_id_id_serialization() {
let expected_json = String::from(r#"123456"#);
let actual_json = serde_json::to_string(&ChatId::Id(123456)).unwrap();
assert_eq!(expected_json, actual_json)
}
#[test]
fn chat_id_channel_username_serialization() {
let expected_json = String::from(r#""@username""#);
let actual_json = serde_json::to_string(&ChatId::ChannelUsername(
String::from("@username"),
))
.unwrap();
assert_eq!(expected_json, actual_json)
}
}
mod answer_pre_checkout_query;
mod answer_shipping_query;
mod edit_message_live_location;

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::True,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, True}
};
/// Use this method to get up to date information about the chat

View file

@ -1,9 +1,11 @@
use crate::network;
use crate::requests::{ChatId, Request, RequestContext, ResponseResult};
use crate::types::True;
use async_trait::async_trait;
use crate::{
network,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, True},
};
///Use this method to promote or demote a user in a supergroup or a channel.
/// The bot must be an administrator in the chat for this to work and must have
/// the appropriate admin rights. Pass False for all boolean parameters to

View file

@ -1,9 +1,10 @@
use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{ChatPermissions, True},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, ChatPermissions, True},
};
use async_trait::async_trait;
/// Use this method to restrict a user in a supergroup. The bot must be an
/// administrator in the supergroup for this to work and must have the

View file

@ -3,10 +3,9 @@ use async_trait::async_trait;
use crate::{
network,
requests::{
form_builder::FormBuilder, ChatId, Request, RequestContext,
ResponseResult,
form_builder::FormBuilder, Request, RequestContext, ResponseResult,
},
types::{InputFile, Message, ParseMode, ReplyMarkup},
types::{ChatId, InputFile, Message, ParseMode, ReplyMarkup},
};
/// Use this method to send audio files, if you want Telegram clients to display

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::True,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, True, ChatAction}
};
///Use this method when you need to tell the user that something is happening
@ -25,21 +25,6 @@ pub struct SendChatAction<'a> {
pub action: ChatAction,
}
#[derive(Debug, Serialize, From, Clone)]
#[serde(rename_all = "snake_case")]
pub enum ChatAction {
Typing,
UploadPhoto,
RecordVideo,
UploadVideo,
RecordAudio,
UploadAudio,
UploadDocument,
FindLocation,
RecordVideoNote,
UploadVideoNote,
}
#[async_trait]
impl Request for SendChatAction<'_> {
type ReturnValue = True;

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
/// Use this method to send phone contacts.

View file

@ -1,8 +1,11 @@
use crate::network;
use crate::requests::{ChatId, Request, RequestContext, ResponseResult};
use crate::types::{Message, ParseMode, ReplyMarkup};
use async_trait::async_trait;
use crate::{
network,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ParseMode, ReplyMarkup}
};
// TODO: add method to bot/api
///Use this method to send general files. On success, the sent Message is
@ -51,6 +54,7 @@ pub struct SendDocument<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<ReplyMarkup>,
}
#[async_trait]
impl Request for SendDocument<'_> {
type ReturnValue = Message;

View file

@ -3,8 +3,8 @@ use serde::Serialize;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
#[derive(Debug, Clone, Serialize)]

View file

@ -4,10 +4,10 @@ use async_trait::async_trait;
use crate::{
network::request_multipart,
requests::{
form_builder::FormBuilder, ChatId, Request, RequestContext,
form_builder::FormBuilder, Request, RequestContext,
ResponseResult,
},
types::{InputFile, InputMedia, Message},
types::{ChatId, InputFile, InputMedia, Message},
};
/// Use this method to send a group of photos or videos as an album.

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ParseMode, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ParseMode, ReplyMarkup},
};
#[derive(Debug, Clone, Serialize)]

View file

@ -3,10 +3,10 @@ use async_trait::async_trait;
use crate::{
network,
requests::{
form_builder::FormBuilder, ChatId, Request, RequestContext,
form_builder::FormBuilder, Request, RequestContext,
ResponseResult,
},
types::{InputFile, Message, ParseMode, ReplyMarkup},
types::{ChatId, InputFile, Message, ParseMode, ReplyMarkup},
};
#[derive(Debug, Clone)]

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
/// Use this method to send a native poll. A native poll can't be sent to a

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{Message, ReplyMarkup},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
/// Use this method to send information about a venue.

View file

@ -1,8 +1,11 @@
use crate::network;
use crate::requests::{ChatId, Request, RequestContext, ResponseResult};
use crate::types::{Message, ReplyMarkup};
use async_trait::async_trait;
use crate::{
network,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ReplyMarkup},
};
///As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1
/// minute long. Use this method to send video messages. On success, the sent
/// Message is returned.

View file

@ -1,8 +1,11 @@
use crate::network;
use crate::requests::{ChatId, Request, RequestContext, ResponseResult};
use crate::types::{Message, ParseMode, ReplyMarkup};
use async_trait::async_trait;
use crate::{
network,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, Message, ParseMode, ReplyMarkup}
};
///Use this method to send audio files, if you want Telegram clients to display
/// the file as a playable voice message. For this to work, your audio must be
/// in an .ogg file encoded with OPUS (other formats may be sent as Audio or

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::{InlineKeyboardMarkup, Message},
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, InlineKeyboardMarkup, Message},
};
/// Use this method to stop updating a live location message before live_period

View file

@ -1,7 +1,10 @@
use async_trait::async_trait;
use crate::network;
use crate::requests::{ChatId, Request, RequestContext, ResponseResult};
use crate::{
network,
requests::{Request, RequestContext, ResponseResult},
types::ChatId,
};
/// Use this method to unban a previously kicked user in a supergroup or
/// channel. The user will not return to the group or channel automatically, but

View file

@ -2,8 +2,8 @@ use async_trait::async_trait;
use crate::{
network,
requests::{ChatId, Request, RequestContext, ResponseResult},
types::True,
requests::{Request, RequestContext, ResponseResult},
types::{ChatId, True}
};
#[derive(Debug, Clone, Serialize)]

14
src/types/chat_action.rs Normal file
View file

@ -0,0 +1,14 @@
#[derive(Debug, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
#[serde(rename_all = "snake_case")]
pub enum ChatAction {
Typing,
UploadPhoto,
RecordVideo,
UploadVideo,
RecordAudio,
UploadAudio,
UploadDocument,
FindLocation,
RecordVideoNote,
UploadVideoNote,
}

36
src/types/chat_id.rs Normal file
View file

@ -0,0 +1,36 @@
/// Unique identifier for the target chat or username of the target channel (in
/// the format @channelusername)
#[derive(Debug, Display, Serialize, From, PartialEq, Eq, Clone)]
#[serde(untagged)]
pub enum ChatId {
/// chat identifier
#[display(fmt = "{}", _0)]
Id(i64),
/// _channel_ username (in the format @channelusername)
#[display(fmt = "{}", _0)]
ChannelUsername(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn chat_id_id_serialization() {
let expected_json = String::from(r#"123456"#);
let actual_json = serde_json::to_string(&ChatId::Id(123456)).unwrap();
assert_eq!(expected_json, actual_json)
}
#[test]
fn chat_id_channel_username_serialization() {
let expected_json = String::from(r#""@username""#);
let actual_json = serde_json::to_string(&ChatId::ChannelUsername(
String::from("@username"),
))
.unwrap();
assert_eq!(expected_json, actual_json)
}
}

View file

@ -5,6 +5,8 @@ pub use self::{
callback_game::CallbackGame,
callback_query::CallbackQuery,
chat::{Chat, ChatKind, NonPrivateChatKind},
chat_action::ChatAction,
chat_id::ChatId,
chat_member::{ChatMember, ChatMemberStatus},
chat_permissions::ChatPermissions,
chat_photo::ChatPhoto,
@ -90,6 +92,8 @@ mod audio;
mod callback_game;
mod callback_query;
mod chat;
mod chat_action;
mod chat_id;
mod chat_member;
mod chat_permissions;
mod chat_photo;

View file

@ -1,5 +1,4 @@
use crate::requests::ChatId;
use crate::types::{InlineKeyboardMarkup, LabeledPrice};
use crate::types::{ChatId, InlineKeyboardMarkup, LabeledPrice};
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct SendInvoice {