use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::api::models::*;
use super::Attachment;
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", content = "data")]
pub enum CommandEntities {
#[serde(rename(serialize = "mention", deserialize = "mention"))]
Mention(Mention),
#[serde(rename(serialize = "forward", deserialize = "forward"))]
Forward(Forward),
#[serde(rename(serialize = "reply", deserialize = "reply"))]
Reply(Reply),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Forward {
pub group_chat_id: Uuid,
pub sender_huid: Uuid,
pub forward_type: ForwardType,
pub source_chat_name: Option<String>,
pub source_sync_id: Option<Uuid>,
pub source_inserted_at: DateTime<Utc>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum ForwardType {
#[serde(rename(serialize = "chat", deserialize = "chat"))]
Chat,
#[serde(rename(serialize = "channel", deserialize = "channel"))]
Channel,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Reply {
pub source_sync_id: Uuid,
pub sender: Uuid,
pub body: String,
pub mentions: Vec<Mention>,
pub attachment: Attachment,
pub reply_type: ReplyType,
pub source_group_chat_id: Option<Uuid>,
pub source_chat_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum ReplyType {
#[serde(rename(serialize = "chat", deserialize = "chat"))]
Chat,
#[serde(rename(serialize = "botx", deserialize = "botx"))]
Botx,
#[serde(rename(serialize = "group_chat", deserialize = "group_chat"))]
GroupChat,
#[serde(rename(serialize = "channel", deserialize = "channel"))]
Channel,
}