use super::{utils::unix_date_formatting, Chat, User};
use crate::model::MessageEntity;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Audio {
pub file_id: String,
pub file_unique_id: String,
pub duration: usize,
pub performer: Option<String>,
pub title: Option<String>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<usize>,
pub thumbnail: Option<PhotoSize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Document {
pub file_id: String,
pub file_unique_id: String,
pub thumbnail: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Animation {
pub file_id: String,
pub file_unique_id: String,
pub width: usize,
pub height: usize,
pub duration: usize,
pub thumbnail: Option<PhotoSize>,
pub mime_type: Option<String>,
pub file_size: Option<usize>,
pub file_name: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct PhotoSize {
pub file_id: String,
pub file_unique_id: String,
pub width: usize,
pub height: usize,
pub file_size: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Video {
pub file_id: String,
pub file_unique_id: String,
pub width: usize,
pub height: usize,
pub duration: usize,
pub thumbnail: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Voice {
pub file_id: String,
pub file_unique_id: String,
pub duration: usize,
pub mime_type: Option<String>,
pub file_size: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct VideoNote {
pub file_id: String,
pub file_unique_id: String,
pub length: usize,
pub duration: usize,
pub thumbnail: Option<PhotoSize>,
pub file_size: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Contact {
pub phone_number: String,
pub first_name: String,
pub last_name: Option<String>,
pub user_id: Option<i64>,
pub vcard: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Location {
pub longitude: f64,
pub latitude: f64,
pub horizontal_accuracy: Option<f64>,
pub live_period: Option<i64>,
pub heading: Option<i64>,
pub proximity_alert_radius: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Venue {
pub location: Location,
pub title: String,
pub address: String,
pub foursquare_id: Option<String>,
pub foursquare_type: Option<String>,
pub google_place_id: Option<String>,
pub google_place_type: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Poll {
pub id: String,
pub question: String,
pub options: Vec<PollOption>,
pub total_voter_count: usize,
#[serde(default)]
pub is_closed: bool,
#[serde(default)]
pub is_anonymous: bool,
#[serde(default)]
pub allows_multiple_answers: bool,
#[serde(rename = "type")]
pub poll_type: PollType,
pub correct_option_id: Option<usize>,
pub explanation: Option<String>,
pub explanation_entities: Option<Vec<MessageEntity>>,
pub open_period: Option<i64>,
#[serde(default)]
#[serde(with = "unix_date_formatting::optional")]
pub close_date: Option<DateTime<Utc>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Dice {
pub emoji: String,
pub value: u8,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct PollOption {
pub text: String,
pub voter_count: usize,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct PollAnswer {
pub poll_id: String,
pub voter_chat: Option<Chat>,
pub user: Option<User>,
pub option_ids: Vec<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub enum PollType {
#[serde(rename = "regular")]
Regular,
#[serde(rename = "quiz")]
Quiz,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct LoginUrl {
pub url: String,
pub forward_text: Option<String>,
pub bot_username: Option<String>,
#[serde(default)]
pub request_write_access: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ProximityAlertTriggered {
pub traveler: User,
pub watcher: User,
pub distance: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct VideoChatScheduled {
#[serde(with = "unix_date_formatting")]
pub start_date: DateTime<Utc>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct VideoChatStarted {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct VideoChatEnded {
pub duration: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct VideoChatParticipantsInvited {
#[serde(default)]
pub users: Option<Vec<User>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct MessageAutoDeleteTimerChanged {
pub message_auto_delete_time: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct WebAppData {
pub data: String,
pub button_text: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ForumTopicCreated {
pub name: String,
pub icon_color: i64,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ForumTopicEdited {
pub name: Option<String>,
pub icon_custom_emoji_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ForumTopicClosed {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ForumTopicReopened {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GeneralForumTopicHidden {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct GeneralForumTopicUnhidden {}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct WriteAccessAllowed {
pub from_request: bool,
pub web_app_name: Option<String>,
#[serde(default)]
pub rom_attachment_menu: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct UserShared {
pub request_id: i64,
pub user_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct ChatShared {
pub request_id: i64,
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Story {}