botx_api/api/models/
file.rs

1use serde::{Serialize, Deserialize};
2use uuid::Uuid;
3
4use crate::api::models::MimeType;
5
6
7/// файл в base64 представление. 
8#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
9#[builder(setter(into, prefix = "with"))]
10pub struct File {
11    /// имя файла
12    pub file_name: String,
13
14    /// data URL + base64 data (RFC 2397)
15    pub data: String,
16}
17
18/// файл в base64 представление. 
19#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
20#[builder(setter(into, prefix = "with"))]
21pub struct FileWithCaption {
22    /// имя файла
23    pub file_name: String,
24
25    /// data URL + base64 data (RFC 2397)
26    pub data: String,
27
28    /// (Default: null) - текст под файлом
29    pub caption: Option<String>,
30}
31
32#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
33#[builder(setter(into, prefix = "with", strip_option))]
34pub struct AsyncFile {
35    /// тип файла
36    #[serde(rename(serialize = "type", deserialize = "type"))] // лексема type зарезервирована TODO: сделать енам для допустимых значений
37    pub async_file_type: String,
38
39    /// ссылка на файл
40    pub file: String,
41
42    /// mimetype файла
43    pub file_mime_type: MimeType,
44
45    /// имя файла
46    pub file_name: String,
47
48    /// (Default: Null) - ссылка на превью
49    #[builder(default)]
50    pub file_preview: Option<String>,
51
52    /// (Default: Null) - высота превью в px
53    #[builder(default)]
54    pub file_preview_height: Option<u32>,
55
56    /// (Default: Null) - ширина превью в px
57    pub file_preview_width: Option<u32>,
58
59    /// размер файла в байтах
60    pub file_size: u32,
61
62    /// хэш файла
63    pub file_hash: String,
64
65    /// “stream”
66    pub file_encryption_algo: String,
67
68    /// размер чанков
69    pub chunk_size: u32,
70
71    /// ID файла
72    pub file_id: Uuid,
73
74    /// (Default: Null) - длительность видео/аудио
75    #[builder(default)]
76    pub duration: Option<u32>,
77
78    /// (Default: Null) - подпись под файлом
79    #[builder(default)]
80    pub caption: Option<String>,
81}
82
83// {
84//     "caption":null,
85//     "chunk_size":2097152,
86//     "duration":null,
87//     "file":"/uploads/files/acdd27e8-87c6-0987-23d4-8da20b491d72/5029dc8fde3043d891816b20c791f6ed.txt?v=1683489628402",
88//     "file_encryption_algo": "stream",
89//     "file_hash":"IkmhWLxuQcbg31qgjMqweXOsmYn5TJ7kHkfQ/jX5t2s=",
90//     "file_id":"4fd998e3-8b3c-5f1d-b1d8-d991bd98ca1a",
91//     "file_mime_type":"text/plain",
92//     "file_name":"uploaded_file.txt",
93//     "file_preview":null,
94//     "file_preview_height":null,
95//     "file_preview_width":null,
96//     "file_size":45,
97//     "type":"document"
98// }