use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub user_id: i64,
pub first_name: String,
pub last_name: Option<String>,
pub username: Option<String>,
pub is_bot: bool,
pub last_activity_time: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotInfo {
#[serde(flatten)]
pub user: User,
pub description: Option<String>,
pub avatar_url: Option<String>,
pub full_avatar_url: Option<String>,
#[serde(default)]
pub commands: Vec<BotCommand>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommand {
pub name: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Chat {
pub chat_id: i64,
pub r#type: String, pub status: String,
pub title: Option<String>,
pub icon: Option<Image>,
pub last_event_time: i64,
pub participants_count: i32,
pub owner_id: Option<i64>,
pub is_public: bool,
pub link: Option<String>,
pub description: Option<String>,
pub dialog_with_user: Option<User>,
pub chat_message_id: Option<String>,
pub pinned_message: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Image {
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatMember {
#[serde(flatten)]
pub user: User,
pub description: Option<String>,
pub avatar_url: Option<String>,
pub full_avatar_url: Option<String>,
pub last_access_time: i64,
pub is_owner: bool,
pub is_admin: bool,
pub join_time: i64,
pub permissions: Vec<String>,
pub alias: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub sender: Option<User>,
pub recipient: Recipient,
pub timestamp: i64,
pub body: Option<MessageBody>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Recipient {
pub chat_id: Option<i64>,
pub user_id: Option<i64>,
pub chat_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageBody {
pub mid: String,
pub seq: i64,
pub text: Option<String>,
pub contact: Option<Contact>,
pub location: Option<Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Contact {
pub name: String,
pub phone: String,
pub vcf_info: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub latitude: f64,
pub longitude: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Update {
pub update_type: UpdateType,
pub timestamp: i64,
pub user_locale: String,
pub message: Option<Message>,
pub callback: Option<CallbackQuery>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UpdateType {
MessageCreated,
MessageCallback,
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallbackQuery {
pub callback_id: String,
pub timestamp: i64,
pub user: User,
pub payload: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
pub url: String,
pub time: i64,
pub update_types: Vec<String>,
}
#[derive(Debug, Clone, Default)]
pub struct UpdateChatInfo {
pub title: Option<String>,
pub description: Option<String>,
pub icon_token: Option<String>,
pub icon_url: Option<String>,
pub link: Option<String>,
pub is_public: Option<bool>,
pub pin: Option<String>,
pub notify: Option<bool>,
}