rust_tdlib/types/
upload_file.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Asynchronously uploads a file to the cloud without sending it in a message. updateFile will be used to notify about upload progress and successful completion of the upload. The file will not have a persistent remote identifier until it will be sent in a message
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct UploadFile {
8    #[doc(hidden)]
9    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
10    extra: Option<String>,
11    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
12    client_id: Option<i32>,
13    /// File to upload
14
15    #[serde(skip_serializing_if = "InputFile::_is_default")]
16    file: InputFile,
17    /// File type; pass null if unknown
18
19    #[serde(skip_serializing_if = "FileType::_is_default")]
20    file_type: FileType,
21    /// Priority of the upload (1-32). The higher the priority, the earlier the file will be uploaded. If the priorities of two files are equal, then the first one for which uploadFile was called will be uploaded first
22
23    #[serde(default)]
24    priority: i32,
25
26    #[serde(rename(serialize = "@type"))]
27    td_type: String,
28}
29
30impl RObject for UploadFile {
31    #[doc(hidden)]
32    fn extra(&self) -> Option<&str> {
33        self.extra.as_deref()
34    }
35    #[doc(hidden)]
36    fn client_id(&self) -> Option<i32> {
37        self.client_id
38    }
39}
40
41impl RFunction for UploadFile {}
42
43impl UploadFile {
44    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
45        Ok(serde_json::from_str(json.as_ref())?)
46    }
47    pub fn builder() -> UploadFileBuilder {
48        let mut inner = UploadFile::default();
49        inner.extra = Some(Uuid::new_v4().to_string());
50
51        inner.td_type = "uploadFile".to_string();
52
53        UploadFileBuilder { inner }
54    }
55
56    pub fn file(&self) -> &InputFile {
57        &self.file
58    }
59
60    pub fn file_type(&self) -> &FileType {
61        &self.file_type
62    }
63
64    pub fn priority(&self) -> i32 {
65        self.priority
66    }
67}
68
69#[doc(hidden)]
70pub struct UploadFileBuilder {
71    inner: UploadFile,
72}
73
74#[deprecated]
75pub type RTDUploadFileBuilder = UploadFileBuilder;
76
77impl UploadFileBuilder {
78    pub fn build(&self) -> UploadFile {
79        self.inner.clone()
80    }
81
82    pub fn file<T: AsRef<InputFile>>(&mut self, file: T) -> &mut Self {
83        self.inner.file = file.as_ref().clone();
84        self
85    }
86
87    pub fn file_type<T: AsRef<FileType>>(&mut self, file_type: T) -> &mut Self {
88        self.inner.file_type = file_type.as_ref().clone();
89        self
90    }
91
92    pub fn priority(&mut self, priority: i32) -> &mut Self {
93        self.inner.priority = priority;
94        self
95    }
96}
97
98impl AsRef<UploadFile> for UploadFile {
99    fn as_ref(&self) -> &UploadFile {
100        self
101    }
102}
103
104impl AsRef<UploadFile> for UploadFileBuilder {
105    fn as_ref(&self) -> &UploadFile {
106        &self.inner
107    }
108}