use super::utils::unix_date_formatting;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use super::{
message_contents::*,
message_entity::*,
ChatLocation,
ChatPhoto,
Game,
InlineKeyboardMarkup,
Invoice,
PassportData,
Sticker,
SuccessfulPayment,
User,
InlineQuery,
CallbackQuery,
ShippingQuery,
PreCheckoutQuery,
ChosenInlineResult
};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RawMessage {
pub message_id: i64,
pub from: Option<super::User>,
pub sender_chat: Option<RawChat>,
#[serde(with = "unix_date_formatting")]
pub date: DateTime<Utc>,
pub chat: RawChat,
pub forward_from: Option<super::User>,
pub forward_from_chat: Option<RawChat>,
pub forward_from_message_id: Option<i64>,
pub forward_signature: Option<String>,
pub forward_sender_name: Option<String>,
#[serde(default)]
#[serde(with = "unix_date_formatting::optional")]
pub forward_date: Option<DateTime<Utc>>,
pub reply_to_message: Option<Box<RawMessage>>,
pub via_bot: Option<User>,
#[serde(default)]
#[serde(with = "unix_date_formatting::optional")]
pub edit_date: Option<DateTime<Utc>>,
pub media_group_id: Option<String>,
pub author_signature: Option<String>,
pub text: Option<String>,
pub entities: Option<Vec<MessageEntity>>,
pub caption_entities: Option<Vec<MessageEntity>>,
pub audio: Option<Audio>,
pub document: Option<Document>,
pub animation: Option<Animation>,
pub game: Option<Game>,
pub photo: Option<Vec<PhotoSize>>,
pub sticker: Option<Sticker>,
pub video: Option<Video>,
pub voice: Option<Voice>,
pub video_note: Option<VideoNote>,
pub caption: Option<String>,
pub contact: Option<Contact>,
pub location: Option<Location>,
pub venue: Option<Venue>,
pub poll: Option<Poll>,
pub dice: Option<Dice>,
pub new_chat_members: Option<Vec<User>>,
pub left_chat_member: Option<User>,
pub new_chat_title: Option<String>,
pub new_chat_photo: Option<Vec<PhotoSize>>,
#[serde(default)]
pub delete_chat_photo: bool,
#[serde(default)]
pub group_chat_created: bool,
#[serde(default)]
pub supergroup_chat_created: bool,
#[serde(default)]
pub channel_chat_created: bool,
pub migrate_to_chat_id: Option<i64>,
pub migrate_from_chat_id: Option<i64>,
pub pinned_message: Option<Box<RawMessage>>,
pub invoice: Option<Invoice>,
pub successful_payment: Option<SuccessfulPayment>,
pub connected_website: Option<String>,
pub passport_data: Option<PassportData>,
pub proximity_alert_triggered: Option<ProximityAlertTriggered>,
pub reply_markup: Option<InlineKeyboardMarkup>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RawChat {
pub id: i64,
#[serde(rename = "type")]
pub chat_type: ChatType,
pub title: Option<String>,
pub username: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub photo: Option<ChatPhoto>,
pub bio: Option<String>,
pub description: Option<String>,
pub invite_link: Option<String>,
pub pinned_message: Option<Box<RawMessage>>,
pub permissions: Option<super::ChatPermissions>,
pub slow_mode_delay: Option<usize>,
pub sticker_set_name: Option<String>,
pub can_set_sticker_set: Option<bool>,
pub linked_chat_id: Option<i64>,
pub location: Option<ChatLocation>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ChatType {
#[serde(rename = "private")]
Private,
#[serde(rename = "group")]
Group,
#[serde(rename = "supergroup")]
SuperGroup,
#[serde(rename = "channel")]
Channel,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RawUpdate {
pub update_id: i64,
pub message: Option<RawMessage>,
pub edited_message: Option<RawMessage>,
pub channel_post: Option<RawMessage>,
pub edited_channel_post: Option<RawMessage>,
pub inline_query: Option<InlineQuery>,
pub chosen_inline_result: Option<ChosenInlineResult>,
pub callback_query: Option<CallbackQuery>,
pub shipping_query: Option<ShippingQuery>,
pub pre_checkout_query: Option<PreCheckoutQuery>,
pub poll: Option<Poll>,
pub poll_answer: Option<PollAnswer>,
}