1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 {
    /// id чата откуда переслали сообщение
    pub group_chat_id: Uuid,

    /// huid автора сообщения
    pub sender_huid: Uuid,

    /// chat|channel
    pub forward_type: ForwardType,

    /// (Optional) - имя чата откуда переслали сообщение
    pub source_chat_name: Option<String>,

    /// (Optional) - sync_id пересылаемого сообщения
    pub source_sync_id: Option<Uuid>,

    /// ts пересылаемого сообщения
    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 {
    /// sync_id исходного сообщения
    pub source_sync_id: Uuid,

    /// huid автора сообщения
    pub sender: Uuid,

    /// текст исходного сообщения
    pub body: String,

    /// меншены исходного сообщения
    pub mentions: Vec<Mention>,

    /// вложение исходного сообщения
    pub attachment: Attachment,

    /// chat|botx|group_chat|channel
    pub reply_type: ReplyType,

    /// (Optional) - ID чата откуда переслали сообщение
    pub source_group_chat_id: Option<Uuid>,

    /// (Optional) - имя чата откуда переслали сообщение
    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,
}