mirror of
https://github.com/teloxide/teloxide.git
synced 2025-03-14 11:44:04 +01:00
Move ChatId
and ChatAction
to types::
This commit is contained in:
parent
ca6b4a4628
commit
2bd5919a53
29 changed files with 126 additions and 110 deletions
|
@ -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
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
14
src/types/chat_action.rs
Normal 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
36
src/types/chat_id.rs
Normal 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)
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue