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// }