rust_tdlib/types/
user_status.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Describes the last time the user was online
8pub trait TDUserStatus: Debug + RObject {}
9
10/// Describes the last time the user was online
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum UserStatus {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// The user status was never changed
18    #[serde(rename = "userStatusEmpty")]
19    Empty(UserStatusEmpty),
20    /// The user is offline, but was online last month
21    #[serde(rename = "userStatusLastMonth")]
22    LastMonth(UserStatusLastMonth),
23    /// The user is offline, but was online last week
24    #[serde(rename = "userStatusLastWeek")]
25    LastWeek(UserStatusLastWeek),
26    /// The user is offline
27    #[serde(rename = "userStatusOffline")]
28    Offline(UserStatusOffline),
29    /// The user is online
30    #[serde(rename = "userStatusOnline")]
31    Online(UserStatusOnline),
32    /// The user was online recently
33    #[serde(rename = "userStatusRecently")]
34    Recently(UserStatusRecently),
35}
36
37impl RObject for UserStatus {
38    #[doc(hidden)]
39    fn extra(&self) -> Option<&str> {
40        match self {
41            UserStatus::Empty(t) => t.extra(),
42            UserStatus::LastMonth(t) => t.extra(),
43            UserStatus::LastWeek(t) => t.extra(),
44            UserStatus::Offline(t) => t.extra(),
45            UserStatus::Online(t) => t.extra(),
46            UserStatus::Recently(t) => t.extra(),
47
48            _ => None,
49        }
50    }
51    #[doc(hidden)]
52    fn client_id(&self) -> Option<i32> {
53        match self {
54            UserStatus::Empty(t) => t.client_id(),
55            UserStatus::LastMonth(t) => t.client_id(),
56            UserStatus::LastWeek(t) => t.client_id(),
57            UserStatus::Offline(t) => t.client_id(),
58            UserStatus::Online(t) => t.client_id(),
59            UserStatus::Recently(t) => t.client_id(),
60
61            _ => None,
62        }
63    }
64}
65
66impl UserStatus {
67    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
68        Ok(serde_json::from_str(json.as_ref())?)
69    }
70    #[doc(hidden)]
71    pub fn _is_default(&self) -> bool {
72        matches!(self, UserStatus::_Default)
73    }
74}
75
76impl AsRef<UserStatus> for UserStatus {
77    fn as_ref(&self) -> &UserStatus {
78        self
79    }
80}
81
82/// The user status was never changed
83#[derive(Debug, Clone, Default, Serialize, Deserialize)]
84pub struct UserStatusEmpty {
85    #[doc(hidden)]
86    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
87    extra: Option<String>,
88    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
89    client_id: Option<i32>,
90}
91
92impl RObject for UserStatusEmpty {
93    #[doc(hidden)]
94    fn extra(&self) -> Option<&str> {
95        self.extra.as_deref()
96    }
97    #[doc(hidden)]
98    fn client_id(&self) -> Option<i32> {
99        self.client_id
100    }
101}
102
103impl TDUserStatus for UserStatusEmpty {}
104
105impl UserStatusEmpty {
106    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
107        Ok(serde_json::from_str(json.as_ref())?)
108    }
109    pub fn builder() -> UserStatusEmptyBuilder {
110        let mut inner = UserStatusEmpty::default();
111        inner.extra = Some(Uuid::new_v4().to_string());
112
113        UserStatusEmptyBuilder { inner }
114    }
115}
116
117#[doc(hidden)]
118pub struct UserStatusEmptyBuilder {
119    inner: UserStatusEmpty,
120}
121
122#[deprecated]
123pub type RTDUserStatusEmptyBuilder = UserStatusEmptyBuilder;
124
125impl UserStatusEmptyBuilder {
126    pub fn build(&self) -> UserStatusEmpty {
127        self.inner.clone()
128    }
129}
130
131impl AsRef<UserStatusEmpty> for UserStatusEmpty {
132    fn as_ref(&self) -> &UserStatusEmpty {
133        self
134    }
135}
136
137impl AsRef<UserStatusEmpty> for UserStatusEmptyBuilder {
138    fn as_ref(&self) -> &UserStatusEmpty {
139        &self.inner
140    }
141}
142
143/// The user is offline, but was online last month
144#[derive(Debug, Clone, Default, Serialize, Deserialize)]
145pub struct UserStatusLastMonth {
146    #[doc(hidden)]
147    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
148    extra: Option<String>,
149    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
150    client_id: Option<i32>,
151}
152
153impl RObject for UserStatusLastMonth {
154    #[doc(hidden)]
155    fn extra(&self) -> Option<&str> {
156        self.extra.as_deref()
157    }
158    #[doc(hidden)]
159    fn client_id(&self) -> Option<i32> {
160        self.client_id
161    }
162}
163
164impl TDUserStatus for UserStatusLastMonth {}
165
166impl UserStatusLastMonth {
167    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
168        Ok(serde_json::from_str(json.as_ref())?)
169    }
170    pub fn builder() -> UserStatusLastMonthBuilder {
171        let mut inner = UserStatusLastMonth::default();
172        inner.extra = Some(Uuid::new_v4().to_string());
173
174        UserStatusLastMonthBuilder { inner }
175    }
176}
177
178#[doc(hidden)]
179pub struct UserStatusLastMonthBuilder {
180    inner: UserStatusLastMonth,
181}
182
183#[deprecated]
184pub type RTDUserStatusLastMonthBuilder = UserStatusLastMonthBuilder;
185
186impl UserStatusLastMonthBuilder {
187    pub fn build(&self) -> UserStatusLastMonth {
188        self.inner.clone()
189    }
190}
191
192impl AsRef<UserStatusLastMonth> for UserStatusLastMonth {
193    fn as_ref(&self) -> &UserStatusLastMonth {
194        self
195    }
196}
197
198impl AsRef<UserStatusLastMonth> for UserStatusLastMonthBuilder {
199    fn as_ref(&self) -> &UserStatusLastMonth {
200        &self.inner
201    }
202}
203
204/// The user is offline, but was online last week
205#[derive(Debug, Clone, Default, Serialize, Deserialize)]
206pub struct UserStatusLastWeek {
207    #[doc(hidden)]
208    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
209    extra: Option<String>,
210    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
211    client_id: Option<i32>,
212}
213
214impl RObject for UserStatusLastWeek {
215    #[doc(hidden)]
216    fn extra(&self) -> Option<&str> {
217        self.extra.as_deref()
218    }
219    #[doc(hidden)]
220    fn client_id(&self) -> Option<i32> {
221        self.client_id
222    }
223}
224
225impl TDUserStatus for UserStatusLastWeek {}
226
227impl UserStatusLastWeek {
228    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
229        Ok(serde_json::from_str(json.as_ref())?)
230    }
231    pub fn builder() -> UserStatusLastWeekBuilder {
232        let mut inner = UserStatusLastWeek::default();
233        inner.extra = Some(Uuid::new_v4().to_string());
234
235        UserStatusLastWeekBuilder { inner }
236    }
237}
238
239#[doc(hidden)]
240pub struct UserStatusLastWeekBuilder {
241    inner: UserStatusLastWeek,
242}
243
244#[deprecated]
245pub type RTDUserStatusLastWeekBuilder = UserStatusLastWeekBuilder;
246
247impl UserStatusLastWeekBuilder {
248    pub fn build(&self) -> UserStatusLastWeek {
249        self.inner.clone()
250    }
251}
252
253impl AsRef<UserStatusLastWeek> for UserStatusLastWeek {
254    fn as_ref(&self) -> &UserStatusLastWeek {
255        self
256    }
257}
258
259impl AsRef<UserStatusLastWeek> for UserStatusLastWeekBuilder {
260    fn as_ref(&self) -> &UserStatusLastWeek {
261        &self.inner
262    }
263}
264
265/// The user is offline
266#[derive(Debug, Clone, Default, Serialize, Deserialize)]
267pub struct UserStatusOffline {
268    #[doc(hidden)]
269    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
270    extra: Option<String>,
271    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
272    client_id: Option<i32>,
273    /// Point in time (Unix timestamp) when the user was last online
274
275    #[serde(default)]
276    was_online: i32,
277}
278
279impl RObject for UserStatusOffline {
280    #[doc(hidden)]
281    fn extra(&self) -> Option<&str> {
282        self.extra.as_deref()
283    }
284    #[doc(hidden)]
285    fn client_id(&self) -> Option<i32> {
286        self.client_id
287    }
288}
289
290impl TDUserStatus for UserStatusOffline {}
291
292impl UserStatusOffline {
293    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
294        Ok(serde_json::from_str(json.as_ref())?)
295    }
296    pub fn builder() -> UserStatusOfflineBuilder {
297        let mut inner = UserStatusOffline::default();
298        inner.extra = Some(Uuid::new_v4().to_string());
299
300        UserStatusOfflineBuilder { inner }
301    }
302
303    pub fn was_online(&self) -> i32 {
304        self.was_online
305    }
306}
307
308#[doc(hidden)]
309pub struct UserStatusOfflineBuilder {
310    inner: UserStatusOffline,
311}
312
313#[deprecated]
314pub type RTDUserStatusOfflineBuilder = UserStatusOfflineBuilder;
315
316impl UserStatusOfflineBuilder {
317    pub fn build(&self) -> UserStatusOffline {
318        self.inner.clone()
319    }
320
321    pub fn was_online(&mut self, was_online: i32) -> &mut Self {
322        self.inner.was_online = was_online;
323        self
324    }
325}
326
327impl AsRef<UserStatusOffline> for UserStatusOffline {
328    fn as_ref(&self) -> &UserStatusOffline {
329        self
330    }
331}
332
333impl AsRef<UserStatusOffline> for UserStatusOfflineBuilder {
334    fn as_ref(&self) -> &UserStatusOffline {
335        &self.inner
336    }
337}
338
339/// The user is online
340#[derive(Debug, Clone, Default, Serialize, Deserialize)]
341pub struct UserStatusOnline {
342    #[doc(hidden)]
343    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
344    extra: Option<String>,
345    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
346    client_id: Option<i32>,
347    /// Point in time (Unix timestamp) when the user's online status will expire
348
349    #[serde(default)]
350    expires: i32,
351}
352
353impl RObject for UserStatusOnline {
354    #[doc(hidden)]
355    fn extra(&self) -> Option<&str> {
356        self.extra.as_deref()
357    }
358    #[doc(hidden)]
359    fn client_id(&self) -> Option<i32> {
360        self.client_id
361    }
362}
363
364impl TDUserStatus for UserStatusOnline {}
365
366impl UserStatusOnline {
367    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
368        Ok(serde_json::from_str(json.as_ref())?)
369    }
370    pub fn builder() -> UserStatusOnlineBuilder {
371        let mut inner = UserStatusOnline::default();
372        inner.extra = Some(Uuid::new_v4().to_string());
373
374        UserStatusOnlineBuilder { inner }
375    }
376
377    pub fn expires(&self) -> i32 {
378        self.expires
379    }
380}
381
382#[doc(hidden)]
383pub struct UserStatusOnlineBuilder {
384    inner: UserStatusOnline,
385}
386
387#[deprecated]
388pub type RTDUserStatusOnlineBuilder = UserStatusOnlineBuilder;
389
390impl UserStatusOnlineBuilder {
391    pub fn build(&self) -> UserStatusOnline {
392        self.inner.clone()
393    }
394
395    pub fn expires(&mut self, expires: i32) -> &mut Self {
396        self.inner.expires = expires;
397        self
398    }
399}
400
401impl AsRef<UserStatusOnline> for UserStatusOnline {
402    fn as_ref(&self) -> &UserStatusOnline {
403        self
404    }
405}
406
407impl AsRef<UserStatusOnline> for UserStatusOnlineBuilder {
408    fn as_ref(&self) -> &UserStatusOnline {
409        &self.inner
410    }
411}
412
413/// The user was online recently
414#[derive(Debug, Clone, Default, Serialize, Deserialize)]
415pub struct UserStatusRecently {
416    #[doc(hidden)]
417    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
418    extra: Option<String>,
419    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
420    client_id: Option<i32>,
421}
422
423impl RObject for UserStatusRecently {
424    #[doc(hidden)]
425    fn extra(&self) -> Option<&str> {
426        self.extra.as_deref()
427    }
428    #[doc(hidden)]
429    fn client_id(&self) -> Option<i32> {
430        self.client_id
431    }
432}
433
434impl TDUserStatus for UserStatusRecently {}
435
436impl UserStatusRecently {
437    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
438        Ok(serde_json::from_str(json.as_ref())?)
439    }
440    pub fn builder() -> UserStatusRecentlyBuilder {
441        let mut inner = UserStatusRecently::default();
442        inner.extra = Some(Uuid::new_v4().to_string());
443
444        UserStatusRecentlyBuilder { inner }
445    }
446}
447
448#[doc(hidden)]
449pub struct UserStatusRecentlyBuilder {
450    inner: UserStatusRecently,
451}
452
453#[deprecated]
454pub type RTDUserStatusRecentlyBuilder = UserStatusRecentlyBuilder;
455
456impl UserStatusRecentlyBuilder {
457    pub fn build(&self) -> UserStatusRecently {
458        self.inner.clone()
459    }
460}
461
462impl AsRef<UserStatusRecently> for UserStatusRecently {
463    fn as_ref(&self) -> &UserStatusRecently {
464        self
465    }
466}
467
468impl AsRef<UserStatusRecently> for UserStatusRecentlyBuilder {
469    fn as_ref(&self) -> &UserStatusRecently {
470        &self.inner
471    }
472}