rust_tdlib/types/
local_file.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Represents a local file
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct LocalFile {
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    /// Local path to the locally available file part; may be empty
14
15    #[serde(default)]
16    path: String,
17    /// True, if it is possible to download or generate the file
18
19    #[serde(default)]
20    can_be_downloaded: bool,
21    /// True, if the file can be deleted
22
23    #[serde(default)]
24    can_be_deleted: bool,
25    /// True, if the file is currently being downloaded (or a local copy is being generated by some other means)
26
27    #[serde(default)]
28    is_downloading_active: bool,
29    /// True, if the local copy is fully available
30
31    #[serde(default)]
32    is_downloading_completed: bool,
33    /// Download will be started from this offset. downloaded_prefix_size is calculated from this offset
34
35    #[serde(default)]
36    download_offset: i32,
37    /// If is_downloading_completed is false, then only some prefix of the file starting from download_offset is ready to be read. downloaded_prefix_size is the size of that prefix in bytes
38
39    #[serde(default)]
40    downloaded_prefix_size: i32,
41    /// Total downloaded file size, in bytes. Can be used only for calculating download progress. The actual file size may be bigger, and some parts of it may contain garbage
42
43    #[serde(default)]
44    downloaded_size: i32,
45}
46
47impl RObject for LocalFile {
48    #[doc(hidden)]
49    fn extra(&self) -> Option<&str> {
50        self.extra.as_deref()
51    }
52    #[doc(hidden)]
53    fn client_id(&self) -> Option<i32> {
54        self.client_id
55    }
56}
57
58impl LocalFile {
59    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
60        Ok(serde_json::from_str(json.as_ref())?)
61    }
62    pub fn builder() -> LocalFileBuilder {
63        let mut inner = LocalFile::default();
64        inner.extra = Some(Uuid::new_v4().to_string());
65
66        LocalFileBuilder { inner }
67    }
68
69    pub fn path(&self) -> &String {
70        &self.path
71    }
72
73    pub fn can_be_downloaded(&self) -> bool {
74        self.can_be_downloaded
75    }
76
77    pub fn can_be_deleted(&self) -> bool {
78        self.can_be_deleted
79    }
80
81    pub fn is_downloading_active(&self) -> bool {
82        self.is_downloading_active
83    }
84
85    pub fn is_downloading_completed(&self) -> bool {
86        self.is_downloading_completed
87    }
88
89    pub fn download_offset(&self) -> i32 {
90        self.download_offset
91    }
92
93    pub fn downloaded_prefix_size(&self) -> i32 {
94        self.downloaded_prefix_size
95    }
96
97    pub fn downloaded_size(&self) -> i32 {
98        self.downloaded_size
99    }
100}
101
102#[doc(hidden)]
103pub struct LocalFileBuilder {
104    inner: LocalFile,
105}
106
107#[deprecated]
108pub type RTDLocalFileBuilder = LocalFileBuilder;
109
110impl LocalFileBuilder {
111    pub fn build(&self) -> LocalFile {
112        self.inner.clone()
113    }
114
115    pub fn path<T: AsRef<str>>(&mut self, path: T) -> &mut Self {
116        self.inner.path = path.as_ref().to_string();
117        self
118    }
119
120    pub fn can_be_downloaded(&mut self, can_be_downloaded: bool) -> &mut Self {
121        self.inner.can_be_downloaded = can_be_downloaded;
122        self
123    }
124
125    pub fn can_be_deleted(&mut self, can_be_deleted: bool) -> &mut Self {
126        self.inner.can_be_deleted = can_be_deleted;
127        self
128    }
129
130    pub fn is_downloading_active(&mut self, is_downloading_active: bool) -> &mut Self {
131        self.inner.is_downloading_active = is_downloading_active;
132        self
133    }
134
135    pub fn is_downloading_completed(&mut self, is_downloading_completed: bool) -> &mut Self {
136        self.inner.is_downloading_completed = is_downloading_completed;
137        self
138    }
139
140    pub fn download_offset(&mut self, download_offset: i32) -> &mut Self {
141        self.inner.download_offset = download_offset;
142        self
143    }
144
145    pub fn downloaded_prefix_size(&mut self, downloaded_prefix_size: i32) -> &mut Self {
146        self.inner.downloaded_prefix_size = downloaded_prefix_size;
147        self
148    }
149
150    pub fn downloaded_size(&mut self, downloaded_size: i32) -> &mut Self {
151        self.inner.downloaded_size = downloaded_size;
152        self
153    }
154}
155
156impl AsRef<LocalFile> for LocalFile {
157    fn as_ref(&self) -> &LocalFile {
158        self
159    }
160}
161
162impl AsRef<LocalFile> for LocalFileBuilder {
163    fn as_ref(&self) -> &LocalFile {
164        &self.inner
165    }
166}