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 89 90 91 92 93 94 95 96 97 98
use serde::{Serialize, Deserialize};
use uuid::Uuid;
use crate::api::models::MimeType;
/// файл в base64 представление.
#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
#[builder(setter(into, prefix = "with"))]
pub struct File {
/// имя файла
pub file_name: String,
/// data URL + base64 data (RFC 2397)
pub data: String,
}
/// файл в base64 представление.
#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
#[builder(setter(into, prefix = "with"))]
pub struct FileWithCaption {
/// имя файла
pub file_name: String,
/// data URL + base64 data (RFC 2397)
pub data: String,
/// (Default: null) - текст под файлом
pub caption: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
#[builder(setter(into, prefix = "with", strip_option))]
pub struct AsyncFile {
/// тип файла
#[serde(rename(serialize = "type", deserialize = "type"))] // лексема type зарезервирована TODO: сделать енам для допустимых значений
pub async_file_type: String,
/// ссылка на файл
pub file: String,
/// mimetype файла
pub file_mime_type: MimeType,
/// имя файла
pub file_name: String,
/// (Default: Null) - ссылка на превью
#[builder(default)]
pub file_preview: Option<String>,
/// (Default: Null) - высота превью в px
#[builder(default)]
pub file_preview_height: Option<u32>,
/// (Default: Null) - ширина превью в px
pub file_preview_width: Option<u32>,
/// размер файла в байтах
pub file_size: u32,
/// хэш файла
pub file_hash: String,
/// “stream”
pub file_encryption_algo: String,
/// размер чанков
pub chunk_size: u32,
/// ID файла
pub file_id: Uuid,
/// (Default: Null) - длительность видео/аудио
#[builder(default)]
pub duration: Option<u32>,
/// (Default: Null) - подпись под файлом
#[builder(default)]
pub caption: Option<String>,
}
// {
// "caption":null,
// "chunk_size":2097152,
// "duration":null,
// "file":"/uploads/files/acdd27e8-87c6-0987-23d4-8da20b491d72/5029dc8fde3043d891816b20c791f6ed.txt?v=1683489628402",
// "file_encryption_algo": "stream",
// "file_hash":"IkmhWLxuQcbg31qgjMqweXOsmYn5TJ7kHkfQ/jX5t2s=",
// "file_id":"4fd998e3-8b3c-5f1d-b1d8-d991bd98ca1a",
// "file_mime_type":"text/plain",
// "file_name":"uploaded_file.txt",
// "file_preview":null,
// "file_preview_height":null,
// "file_preview_width":null,
// "file_size":45,
// "type":"document"
// }