botx_api/bot/models/
attachment.rs

1// #[derive(Debug, Serialize, Deserialize)]
2// pub struct Attachment {
3//     /// тип вложения
4//     #[serde(rename(serialize = "type", deserialize = "type"))] // лексема type зарезервирована
5//     pub attachment_type: AttachmentType,
6
7//     /// объект с данными вложения
8//     pub data: AttachmentData,
9// }
10
11/// тип вложения
12// #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
13// pub enum AttachmentType {
14//     #[serde(rename(serialize = "image", deserialize = "image"))]
15//     Image,
16//     #[serde(rename(serialize = "video", deserialize = "video"))]
17//     Video,
18//     #[serde(rename(serialize = "document", deserialize = "document"))]
19//     Document,
20//     #[serde(rename(serialize = "voice", deserialize = "voice"))]
21//     Voice,
22//     #[serde(rename(serialize = "link", deserialize = "link"))]
23//     Link,
24// }
25
26
27use serde::{Serialize, Deserialize};
28use uuid::Uuid;
29
30#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
31#[serde(tag = "type", content = "data")]
32//#[serde(untagged)]
33pub enum Attachment/* Data */ {
34    #[serde(rename(serialize = "image", deserialize = "image"))]
35    Image(ImageAttachment),
36    #[serde(rename(serialize = "video", deserialize = "video"))]
37    Video(VideoAttachment),
38    #[serde(rename(serialize = "document", deserialize = "document"))]
39    Document(DocumentAttachment),
40    #[serde(rename(serialize = "voice", deserialize = "voice"))]
41    Voice(VoiceAttachment),
42    #[serde(rename(serialize = "location", deserialize = "location"))]
43    Location(LocationAttachment),
44    #[serde(rename(serialize = "contact", deserialize = "contact"))]
45    Contact(ContactAttachment),
46    #[serde(rename(serialize = "link", deserialize = "link"))]
47    Link(LinkAttachment),
48    #[serde(rename(serialize = "sticker", deserialize = "sticker"))]
49    Sticker(StickerAttachment),
50}
51
52#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
53pub struct ImageAttachment {
54    /// содержимое файла в формате data URL + base64 data (RFC 2397)
55    pub content: String,
56
57    /// имя файла
58    pub file_name: Option<String>,
59}
60
61#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
62pub struct VideoAttachment {
63    /// содержимое файла в формате data URL + base64 data (RFC 2397)
64    pub content: String,
65
66    /// имя файла
67    pub file_name: Option<String>,
68
69    /// длительность воспроизведения
70    pub duration: u32,
71}
72
73#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
74pub struct DocumentAttachment {
75    /// содержимое файла в формате data URL + base64 data (RFC 2397)
76    pub content: String,
77
78    /// имя файла
79    pub file_name: Option<String>,
80}
81
82#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
83pub struct VoiceAttachment {
84    /// содержимое файла в формате data URL + base64 data (RFC 2397)
85    pub content: String,
86
87    /// длительность воспроизведения
88    pub duration: u32,
89}
90
91#[derive(Debug, Serialize, Deserialize)]
92pub struct LocationAttachment {
93    /// название местоположения
94    pub location_name: String,
95
96    /// адрес
97    pub location_address: String,
98
99    /// широта
100    pub location_lat: f32,
101
102    /// долгота
103    pub location_lng: f32,
104}
105
106impl Eq for LocationAttachment { }
107
108impl PartialEq for LocationAttachment {
109    fn eq(&self, other: &Self) -> bool {
110        self.location_name == other.location_name && self.location_address == other.location_address && self.location_lat == other.location_lat && self.location_lng == other.location_lng
111    }
112}
113
114#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
115pub struct ContactAttachment {
116    /// имя файла
117    pub file_name: String,
118
119    /// имя контакта
120    pub contact_name: String,
121
122    /// содержимое файла в формате data URL + base64 data (RFC 2397)
123    pub content: String,
124}
125
126#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
127pub struct LinkAttachment {
128    /// урл ссылки
129    pub url: String,
130
131    /// заголовок
132    pub url_title: Option<String>,
133
134    /// урл изображения для предварительного просмотра ссылки
135    pub url_preview: Option<String>,
136
137    /// текст ссылки
138    pub url_text: Option<String>,
139}
140
141#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
142pub struct StickerAttachment {
143    /// id стикера
144    pub id: Uuid,
145
146    /// ссылка на стикер
147    pub link: String,
148
149    /// id стикерпака
150    pub pack: Uuid,
151
152    /// версия файла
153    pub version: u32,
154}