rust_tdlib/types/
user_status.rs1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDUserStatus: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum UserStatus {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "userStatusEmpty")]
19 Empty(UserStatusEmpty),
20 #[serde(rename = "userStatusLastMonth")]
22 LastMonth(UserStatusLastMonth),
23 #[serde(rename = "userStatusLastWeek")]
25 LastWeek(UserStatusLastWeek),
26 #[serde(rename = "userStatusOffline")]
28 Offline(UserStatusOffline),
29 #[serde(rename = "userStatusOnline")]
31 Online(UserStatusOnline),
32 #[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#[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#[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#[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#[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 #[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#[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 #[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#[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}