rust_tdlib/types/
log_stream.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Describes a stream to which TDLib internal log is written
8pub trait TDLogStream: Debug + RObject {}
9
10/// Describes a stream to which TDLib internal log is written
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum LogStream {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// Returns information about currently used log stream for internal logging of TDLib. Can be called synchronously
18    #[serde(rename = "getLogStream")]
19    GetLogStream(GetLogStream),
20    /// The log is written to stderr or an OS specific log
21    #[serde(rename = "logStreamDefault")]
22    Default(LogStreamDefault),
23    /// The log is written nowhere
24    #[serde(rename = "logStreamEmpty")]
25    Empty(LogStreamEmpty),
26    /// The log is written to a file
27    #[serde(rename = "logStreamFile")]
28    File(LogStreamFile),
29}
30
31impl RObject for LogStream {
32    #[doc(hidden)]
33    fn extra(&self) -> Option<&str> {
34        match self {
35            LogStream::GetLogStream(t) => t.extra(),
36            LogStream::Default(t) => t.extra(),
37            LogStream::Empty(t) => t.extra(),
38            LogStream::File(t) => t.extra(),
39
40            _ => None,
41        }
42    }
43    #[doc(hidden)]
44    fn client_id(&self) -> Option<i32> {
45        match self {
46            LogStream::GetLogStream(t) => t.client_id(),
47            LogStream::Default(t) => t.client_id(),
48            LogStream::Empty(t) => t.client_id(),
49            LogStream::File(t) => t.client_id(),
50
51            _ => None,
52        }
53    }
54}
55
56impl LogStream {
57    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
58        Ok(serde_json::from_str(json.as_ref())?)
59    }
60    #[doc(hidden)]
61    pub fn _is_default(&self) -> bool {
62        matches!(self, LogStream::_Default)
63    }
64}
65
66impl AsRef<LogStream> for LogStream {
67    fn as_ref(&self) -> &LogStream {
68        self
69    }
70}
71
72/// The log is written to stderr or an OS specific log
73#[derive(Debug, Clone, Default, Serialize, Deserialize)]
74pub struct LogStreamDefault {
75    #[doc(hidden)]
76    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
77    extra: Option<String>,
78    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
79    client_id: Option<i32>,
80}
81
82impl RObject for LogStreamDefault {
83    #[doc(hidden)]
84    fn extra(&self) -> Option<&str> {
85        self.extra.as_deref()
86    }
87    #[doc(hidden)]
88    fn client_id(&self) -> Option<i32> {
89        self.client_id
90    }
91}
92
93impl TDLogStream for LogStreamDefault {}
94
95impl LogStreamDefault {
96    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
97        Ok(serde_json::from_str(json.as_ref())?)
98    }
99    pub fn builder() -> LogStreamDefaultBuilder {
100        let mut inner = LogStreamDefault::default();
101        inner.extra = Some(Uuid::new_v4().to_string());
102
103        LogStreamDefaultBuilder { inner }
104    }
105}
106
107#[doc(hidden)]
108pub struct LogStreamDefaultBuilder {
109    inner: LogStreamDefault,
110}
111
112#[deprecated]
113pub type RTDLogStreamDefaultBuilder = LogStreamDefaultBuilder;
114
115impl LogStreamDefaultBuilder {
116    pub fn build(&self) -> LogStreamDefault {
117        self.inner.clone()
118    }
119}
120
121impl AsRef<LogStreamDefault> for LogStreamDefault {
122    fn as_ref(&self) -> &LogStreamDefault {
123        self
124    }
125}
126
127impl AsRef<LogStreamDefault> for LogStreamDefaultBuilder {
128    fn as_ref(&self) -> &LogStreamDefault {
129        &self.inner
130    }
131}
132
133/// The log is written nowhere
134#[derive(Debug, Clone, Default, Serialize, Deserialize)]
135pub struct LogStreamEmpty {
136    #[doc(hidden)]
137    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
138    extra: Option<String>,
139    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
140    client_id: Option<i32>,
141}
142
143impl RObject for LogStreamEmpty {
144    #[doc(hidden)]
145    fn extra(&self) -> Option<&str> {
146        self.extra.as_deref()
147    }
148    #[doc(hidden)]
149    fn client_id(&self) -> Option<i32> {
150        self.client_id
151    }
152}
153
154impl TDLogStream for LogStreamEmpty {}
155
156impl LogStreamEmpty {
157    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
158        Ok(serde_json::from_str(json.as_ref())?)
159    }
160    pub fn builder() -> LogStreamEmptyBuilder {
161        let mut inner = LogStreamEmpty::default();
162        inner.extra = Some(Uuid::new_v4().to_string());
163
164        LogStreamEmptyBuilder { inner }
165    }
166}
167
168#[doc(hidden)]
169pub struct LogStreamEmptyBuilder {
170    inner: LogStreamEmpty,
171}
172
173#[deprecated]
174pub type RTDLogStreamEmptyBuilder = LogStreamEmptyBuilder;
175
176impl LogStreamEmptyBuilder {
177    pub fn build(&self) -> LogStreamEmpty {
178        self.inner.clone()
179    }
180}
181
182impl AsRef<LogStreamEmpty> for LogStreamEmpty {
183    fn as_ref(&self) -> &LogStreamEmpty {
184        self
185    }
186}
187
188impl AsRef<LogStreamEmpty> for LogStreamEmptyBuilder {
189    fn as_ref(&self) -> &LogStreamEmpty {
190        &self.inner
191    }
192}
193
194/// The log is written to a file
195#[derive(Debug, Clone, Default, Serialize, Deserialize)]
196pub struct LogStreamFile {
197    #[doc(hidden)]
198    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
199    extra: Option<String>,
200    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
201    client_id: Option<i32>,
202    /// Path to the file to where the internal TDLib log will be written
203
204    #[serde(default)]
205    path: String,
206    /// The maximum size of the file to where the internal TDLib log is written before the file will automatically be rotated, in bytes
207
208    #[serde(default)]
209    max_file_size: i64,
210    /// Pass true to additionally redirect stderr to the log file. Ignored on Windows
211
212    #[serde(default)]
213    redirect_stderr: bool,
214}
215
216impl RObject for LogStreamFile {
217    #[doc(hidden)]
218    fn extra(&self) -> Option<&str> {
219        self.extra.as_deref()
220    }
221    #[doc(hidden)]
222    fn client_id(&self) -> Option<i32> {
223        self.client_id
224    }
225}
226
227impl TDLogStream for LogStreamFile {}
228
229impl LogStreamFile {
230    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
231        Ok(serde_json::from_str(json.as_ref())?)
232    }
233    pub fn builder() -> LogStreamFileBuilder {
234        let mut inner = LogStreamFile::default();
235        inner.extra = Some(Uuid::new_v4().to_string());
236
237        LogStreamFileBuilder { inner }
238    }
239
240    pub fn path(&self) -> &String {
241        &self.path
242    }
243
244    pub fn max_file_size(&self) -> i64 {
245        self.max_file_size
246    }
247
248    pub fn redirect_stderr(&self) -> bool {
249        self.redirect_stderr
250    }
251}
252
253#[doc(hidden)]
254pub struct LogStreamFileBuilder {
255    inner: LogStreamFile,
256}
257
258#[deprecated]
259pub type RTDLogStreamFileBuilder = LogStreamFileBuilder;
260
261impl LogStreamFileBuilder {
262    pub fn build(&self) -> LogStreamFile {
263        self.inner.clone()
264    }
265
266    pub fn path<T: AsRef<str>>(&mut self, path: T) -> &mut Self {
267        self.inner.path = path.as_ref().to_string();
268        self
269    }
270
271    pub fn max_file_size(&mut self, max_file_size: i64) -> &mut Self {
272        self.inner.max_file_size = max_file_size;
273        self
274    }
275
276    pub fn redirect_stderr(&mut self, redirect_stderr: bool) -> &mut Self {
277        self.inner.redirect_stderr = redirect_stderr;
278        self
279    }
280}
281
282impl AsRef<LogStreamFile> for LogStreamFile {
283    fn as_ref(&self) -> &LogStreamFile {
284        self
285    }
286}
287
288impl AsRef<LogStreamFile> for LogStreamFileBuilder {
289    fn as_ref(&self) -> &LogStreamFile {
290        &self.inner
291    }
292}