use super::InputFile;
use crate::model::{
utils::{unix_date_formatting, IntegerOrString},
Chat, ChatPermissions,
};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use telexide_proc_macros::build_struct;
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct BanChatMember {
pub chat_id: IntegerOrString,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub until_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub revoke_messages: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct UnbanChatMember {
pub chat_id: IntegerOrString,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub only_if_banned: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct RestrictChatMember {
pub chat_id: IntegerOrString,
pub user_id: i64,
pub permissions: ChatPermissions,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "unix_date_formatting::optional")]
pub until_date: Option<DateTime<Utc>>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct PromoteChatMember {
pub chat_id: IntegerOrString,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_anonymous: Option<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_delete_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_restrict_members: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_promote_members: 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_video_chats: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_chat: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_topics: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatAdministratorCustomTitle {
pub chat_id: IntegerOrString,
pub user_id: i64,
pub custom_title: String,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct BanChatSenderChat {
pub chat_id: IntegerOrString,
pub sender_chat_id: i64,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct UnbanChatSenderChat {
pub chat_id: IntegerOrString,
pub sender_chat_id: i64,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatPermissions {
pub chat_id: IntegerOrString,
pub permissions: ChatPermissions,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ExportChatInviteLink {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatPhoto {
pub chat_id: IntegerOrString,
pub photo: InputFile,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct DeleteChatPhoto {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatTitle {
pub chat_id: IntegerOrString,
pub title: String,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatDescription {
pub chat_id: IntegerOrString,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct PinChatMessage {
pub chat_id: IntegerOrString,
pub message_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_notification: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct UnpinChatMessage {
pub chat_id: IntegerOrString,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<i64>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct UnpinAllChatMessages {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct LeaveChat {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GetChat {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GetChatAdministrators {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GetChatMemberCount {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GetChatMember {
pub chat_id: IntegerOrString,
pub user_id: i64,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SetChatStickerSet {
pub chat_id: IntegerOrString,
pub sticker_set_name: String,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct DeleteChatStickerSet {
pub chat_id: IntegerOrString,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct CreateChatInviteLink {
pub chat_id: IntegerOrString,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expire_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub member_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creates_join_request: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct EditChatInviteLink {
pub chat_id: IntegerOrString,
pub invite_link: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expire_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub member_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creates_join_request: Option<bool>,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct RevokeChatInviteLink {
pub chat_id: IntegerOrString,
pub invite_link: String,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ApproveChatJoinRequest {
pub chat_id: IntegerOrString,
pub user_id: i64,
}
#[build_struct]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct DeclineChatJoinRequest {
pub chat_id: IntegerOrString,
pub user_id: i64,
}
macro_rules! impl_from_chat {
($name:ident) => {
impl From<Chat> for $name {
fn from(chat: Chat) -> Self {
Self {
chat_id: chat.get_id().into(),
}
}
}
};
}
impl_from_chat!(ExportChatInviteLink);
impl_from_chat!(DeleteChatPhoto);
impl_from_chat!(UnpinAllChatMessages);
impl_from_chat!(LeaveChat);
impl_from_chat!(GetChat);
impl_from_chat!(GetChatAdministrators);
impl_from_chat!(GetChatMemberCount);
impl_from_chat!(DeleteChatStickerSet);