rust_tdlib/types/
suggested_action.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Describes an action suggested to the current user
8pub trait TDSuggestedAction: Debug + RObject {}
9
10/// Describes an action suggested to the current user
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum SuggestedAction {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// Suggests the user to check whether they still remember their 2-step verification password
18    #[serde(rename = "suggestedActionCheckPassword")]
19    CheckPassword(SuggestedActionCheckPassword),
20    /// Suggests the user to check whether authorization phone number is correct and change the phone number if it is inaccessible
21    #[serde(rename = "suggestedActionCheckPhoneNumber")]
22    CheckPhoneNumber(SuggestedActionCheckPhoneNumber),
23    /// Suggests the user to convert specified supergroup to a broadcast group
24    #[serde(rename = "suggestedActionConvertToBroadcastGroup")]
25    ConvertToBroadcastGroup(SuggestedActionConvertToBroadcastGroup),
26    /// Suggests the user to enable "archive_and_mute_new_chats_from_unknown_users" option
27    #[serde(rename = "suggestedActionEnableArchiveAndMuteNewChats")]
28    EnableArchiveAndMuteNewChats(SuggestedActionEnableArchiveAndMuteNewChats),
29    /// Suggests the user to set a 2-step verification password to be able to log in again
30    #[serde(rename = "suggestedActionSetPassword")]
31    SetPassword(SuggestedActionSetPassword),
32    /// Suggests the user to view a hint about the meaning of one and two check marks on sent messages
33    #[serde(rename = "suggestedActionViewChecksHint")]
34    ViewChecksHint(SuggestedActionViewChecksHint),
35}
36
37impl RObject for SuggestedAction {
38    #[doc(hidden)]
39    fn extra(&self) -> Option<&str> {
40        match self {
41            SuggestedAction::CheckPassword(t) => t.extra(),
42            SuggestedAction::CheckPhoneNumber(t) => t.extra(),
43            SuggestedAction::ConvertToBroadcastGroup(t) => t.extra(),
44            SuggestedAction::EnableArchiveAndMuteNewChats(t) => t.extra(),
45            SuggestedAction::SetPassword(t) => t.extra(),
46            SuggestedAction::ViewChecksHint(t) => t.extra(),
47
48            _ => None,
49        }
50    }
51    #[doc(hidden)]
52    fn client_id(&self) -> Option<i32> {
53        match self {
54            SuggestedAction::CheckPassword(t) => t.client_id(),
55            SuggestedAction::CheckPhoneNumber(t) => t.client_id(),
56            SuggestedAction::ConvertToBroadcastGroup(t) => t.client_id(),
57            SuggestedAction::EnableArchiveAndMuteNewChats(t) => t.client_id(),
58            SuggestedAction::SetPassword(t) => t.client_id(),
59            SuggestedAction::ViewChecksHint(t) => t.client_id(),
60
61            _ => None,
62        }
63    }
64}
65
66impl SuggestedAction {
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, SuggestedAction::_Default)
73    }
74}
75
76impl AsRef<SuggestedAction> for SuggestedAction {
77    fn as_ref(&self) -> &SuggestedAction {
78        self
79    }
80}
81
82/// Suggests the user to check whether they still remember their 2-step verification password
83#[derive(Debug, Clone, Default, Serialize, Deserialize)]
84pub struct SuggestedActionCheckPassword {
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 SuggestedActionCheckPassword {
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 TDSuggestedAction for SuggestedActionCheckPassword {}
104
105impl SuggestedActionCheckPassword {
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() -> SuggestedActionCheckPasswordBuilder {
110        let mut inner = SuggestedActionCheckPassword::default();
111        inner.extra = Some(Uuid::new_v4().to_string());
112
113        SuggestedActionCheckPasswordBuilder { inner }
114    }
115}
116
117#[doc(hidden)]
118pub struct SuggestedActionCheckPasswordBuilder {
119    inner: SuggestedActionCheckPassword,
120}
121
122#[deprecated]
123pub type RTDSuggestedActionCheckPasswordBuilder = SuggestedActionCheckPasswordBuilder;
124
125impl SuggestedActionCheckPasswordBuilder {
126    pub fn build(&self) -> SuggestedActionCheckPassword {
127        self.inner.clone()
128    }
129}
130
131impl AsRef<SuggestedActionCheckPassword> for SuggestedActionCheckPassword {
132    fn as_ref(&self) -> &SuggestedActionCheckPassword {
133        self
134    }
135}
136
137impl AsRef<SuggestedActionCheckPassword> for SuggestedActionCheckPasswordBuilder {
138    fn as_ref(&self) -> &SuggestedActionCheckPassword {
139        &self.inner
140    }
141}
142
143/// Suggests the user to check whether authorization phone number is correct and change the phone number if it is inaccessible
144#[derive(Debug, Clone, Default, Serialize, Deserialize)]
145pub struct SuggestedActionCheckPhoneNumber {
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 SuggestedActionCheckPhoneNumber {
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 TDSuggestedAction for SuggestedActionCheckPhoneNumber {}
165
166impl SuggestedActionCheckPhoneNumber {
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() -> SuggestedActionCheckPhoneNumberBuilder {
171        let mut inner = SuggestedActionCheckPhoneNumber::default();
172        inner.extra = Some(Uuid::new_v4().to_string());
173
174        SuggestedActionCheckPhoneNumberBuilder { inner }
175    }
176}
177
178#[doc(hidden)]
179pub struct SuggestedActionCheckPhoneNumberBuilder {
180    inner: SuggestedActionCheckPhoneNumber,
181}
182
183#[deprecated]
184pub type RTDSuggestedActionCheckPhoneNumberBuilder = SuggestedActionCheckPhoneNumberBuilder;
185
186impl SuggestedActionCheckPhoneNumberBuilder {
187    pub fn build(&self) -> SuggestedActionCheckPhoneNumber {
188        self.inner.clone()
189    }
190}
191
192impl AsRef<SuggestedActionCheckPhoneNumber> for SuggestedActionCheckPhoneNumber {
193    fn as_ref(&self) -> &SuggestedActionCheckPhoneNumber {
194        self
195    }
196}
197
198impl AsRef<SuggestedActionCheckPhoneNumber> for SuggestedActionCheckPhoneNumberBuilder {
199    fn as_ref(&self) -> &SuggestedActionCheckPhoneNumber {
200        &self.inner
201    }
202}
203
204/// Suggests the user to convert specified supergroup to a broadcast group
205#[derive(Debug, Clone, Default, Serialize, Deserialize)]
206pub struct SuggestedActionConvertToBroadcastGroup {
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    /// Supergroup identifier
213
214    #[serde(default)]
215    supergroup_id: i64,
216}
217
218impl RObject for SuggestedActionConvertToBroadcastGroup {
219    #[doc(hidden)]
220    fn extra(&self) -> Option<&str> {
221        self.extra.as_deref()
222    }
223    #[doc(hidden)]
224    fn client_id(&self) -> Option<i32> {
225        self.client_id
226    }
227}
228
229impl TDSuggestedAction for SuggestedActionConvertToBroadcastGroup {}
230
231impl SuggestedActionConvertToBroadcastGroup {
232    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
233        Ok(serde_json::from_str(json.as_ref())?)
234    }
235    pub fn builder() -> SuggestedActionConvertToBroadcastGroupBuilder {
236        let mut inner = SuggestedActionConvertToBroadcastGroup::default();
237        inner.extra = Some(Uuid::new_v4().to_string());
238
239        SuggestedActionConvertToBroadcastGroupBuilder { inner }
240    }
241
242    pub fn supergroup_id(&self) -> i64 {
243        self.supergroup_id
244    }
245}
246
247#[doc(hidden)]
248pub struct SuggestedActionConvertToBroadcastGroupBuilder {
249    inner: SuggestedActionConvertToBroadcastGroup,
250}
251
252#[deprecated]
253pub type RTDSuggestedActionConvertToBroadcastGroupBuilder =
254    SuggestedActionConvertToBroadcastGroupBuilder;
255
256impl SuggestedActionConvertToBroadcastGroupBuilder {
257    pub fn build(&self) -> SuggestedActionConvertToBroadcastGroup {
258        self.inner.clone()
259    }
260
261    pub fn supergroup_id(&mut self, supergroup_id: i64) -> &mut Self {
262        self.inner.supergroup_id = supergroup_id;
263        self
264    }
265}
266
267impl AsRef<SuggestedActionConvertToBroadcastGroup> for SuggestedActionConvertToBroadcastGroup {
268    fn as_ref(&self) -> &SuggestedActionConvertToBroadcastGroup {
269        self
270    }
271}
272
273impl AsRef<SuggestedActionConvertToBroadcastGroup>
274    for SuggestedActionConvertToBroadcastGroupBuilder
275{
276    fn as_ref(&self) -> &SuggestedActionConvertToBroadcastGroup {
277        &self.inner
278    }
279}
280
281/// Suggests the user to enable "archive_and_mute_new_chats_from_unknown_users" option
282#[derive(Debug, Clone, Default, Serialize, Deserialize)]
283pub struct SuggestedActionEnableArchiveAndMuteNewChats {
284    #[doc(hidden)]
285    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
286    extra: Option<String>,
287    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
288    client_id: Option<i32>,
289}
290
291impl RObject for SuggestedActionEnableArchiveAndMuteNewChats {
292    #[doc(hidden)]
293    fn extra(&self) -> Option<&str> {
294        self.extra.as_deref()
295    }
296    #[doc(hidden)]
297    fn client_id(&self) -> Option<i32> {
298        self.client_id
299    }
300}
301
302impl TDSuggestedAction for SuggestedActionEnableArchiveAndMuteNewChats {}
303
304impl SuggestedActionEnableArchiveAndMuteNewChats {
305    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
306        Ok(serde_json::from_str(json.as_ref())?)
307    }
308    pub fn builder() -> SuggestedActionEnableArchiveAndMuteNewChatsBuilder {
309        let mut inner = SuggestedActionEnableArchiveAndMuteNewChats::default();
310        inner.extra = Some(Uuid::new_v4().to_string());
311
312        SuggestedActionEnableArchiveAndMuteNewChatsBuilder { inner }
313    }
314}
315
316#[doc(hidden)]
317pub struct SuggestedActionEnableArchiveAndMuteNewChatsBuilder {
318    inner: SuggestedActionEnableArchiveAndMuteNewChats,
319}
320
321#[deprecated]
322pub type RTDSuggestedActionEnableArchiveAndMuteNewChatsBuilder =
323    SuggestedActionEnableArchiveAndMuteNewChatsBuilder;
324
325impl SuggestedActionEnableArchiveAndMuteNewChatsBuilder {
326    pub fn build(&self) -> SuggestedActionEnableArchiveAndMuteNewChats {
327        self.inner.clone()
328    }
329}
330
331impl AsRef<SuggestedActionEnableArchiveAndMuteNewChats>
332    for SuggestedActionEnableArchiveAndMuteNewChats
333{
334    fn as_ref(&self) -> &SuggestedActionEnableArchiveAndMuteNewChats {
335        self
336    }
337}
338
339impl AsRef<SuggestedActionEnableArchiveAndMuteNewChats>
340    for SuggestedActionEnableArchiveAndMuteNewChatsBuilder
341{
342    fn as_ref(&self) -> &SuggestedActionEnableArchiveAndMuteNewChats {
343        &self.inner
344    }
345}
346
347/// Suggests the user to set a 2-step verification password to be able to log in again
348#[derive(Debug, Clone, Default, Serialize, Deserialize)]
349pub struct SuggestedActionSetPassword {
350    #[doc(hidden)]
351    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
352    extra: Option<String>,
353    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
354    client_id: Option<i32>,
355    /// The number of days to pass between consecutive authorizations if the user declines to set password
356
357    #[serde(default)]
358    authorization_delay: i32,
359}
360
361impl RObject for SuggestedActionSetPassword {
362    #[doc(hidden)]
363    fn extra(&self) -> Option<&str> {
364        self.extra.as_deref()
365    }
366    #[doc(hidden)]
367    fn client_id(&self) -> Option<i32> {
368        self.client_id
369    }
370}
371
372impl TDSuggestedAction for SuggestedActionSetPassword {}
373
374impl SuggestedActionSetPassword {
375    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
376        Ok(serde_json::from_str(json.as_ref())?)
377    }
378    pub fn builder() -> SuggestedActionSetPasswordBuilder {
379        let mut inner = SuggestedActionSetPassword::default();
380        inner.extra = Some(Uuid::new_v4().to_string());
381
382        SuggestedActionSetPasswordBuilder { inner }
383    }
384
385    pub fn authorization_delay(&self) -> i32 {
386        self.authorization_delay
387    }
388}
389
390#[doc(hidden)]
391pub struct SuggestedActionSetPasswordBuilder {
392    inner: SuggestedActionSetPassword,
393}
394
395#[deprecated]
396pub type RTDSuggestedActionSetPasswordBuilder = SuggestedActionSetPasswordBuilder;
397
398impl SuggestedActionSetPasswordBuilder {
399    pub fn build(&self) -> SuggestedActionSetPassword {
400        self.inner.clone()
401    }
402
403    pub fn authorization_delay(&mut self, authorization_delay: i32) -> &mut Self {
404        self.inner.authorization_delay = authorization_delay;
405        self
406    }
407}
408
409impl AsRef<SuggestedActionSetPassword> for SuggestedActionSetPassword {
410    fn as_ref(&self) -> &SuggestedActionSetPassword {
411        self
412    }
413}
414
415impl AsRef<SuggestedActionSetPassword> for SuggestedActionSetPasswordBuilder {
416    fn as_ref(&self) -> &SuggestedActionSetPassword {
417        &self.inner
418    }
419}
420
421/// Suggests the user to view a hint about the meaning of one and two check marks on sent messages
422#[derive(Debug, Clone, Default, Serialize, Deserialize)]
423pub struct SuggestedActionViewChecksHint {
424    #[doc(hidden)]
425    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
426    extra: Option<String>,
427    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
428    client_id: Option<i32>,
429}
430
431impl RObject for SuggestedActionViewChecksHint {
432    #[doc(hidden)]
433    fn extra(&self) -> Option<&str> {
434        self.extra.as_deref()
435    }
436    #[doc(hidden)]
437    fn client_id(&self) -> Option<i32> {
438        self.client_id
439    }
440}
441
442impl TDSuggestedAction for SuggestedActionViewChecksHint {}
443
444impl SuggestedActionViewChecksHint {
445    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
446        Ok(serde_json::from_str(json.as_ref())?)
447    }
448    pub fn builder() -> SuggestedActionViewChecksHintBuilder {
449        let mut inner = SuggestedActionViewChecksHint::default();
450        inner.extra = Some(Uuid::new_v4().to_string());
451
452        SuggestedActionViewChecksHintBuilder { inner }
453    }
454}
455
456#[doc(hidden)]
457pub struct SuggestedActionViewChecksHintBuilder {
458    inner: SuggestedActionViewChecksHint,
459}
460
461#[deprecated]
462pub type RTDSuggestedActionViewChecksHintBuilder = SuggestedActionViewChecksHintBuilder;
463
464impl SuggestedActionViewChecksHintBuilder {
465    pub fn build(&self) -> SuggestedActionViewChecksHint {
466        self.inner.clone()
467    }
468}
469
470impl AsRef<SuggestedActionViewChecksHint> for SuggestedActionViewChecksHint {
471    fn as_ref(&self) -> &SuggestedActionViewChecksHint {
472        self
473    }
474}
475
476impl AsRef<SuggestedActionViewChecksHint> for SuggestedActionViewChecksHintBuilder {
477    fn as_ref(&self) -> &SuggestedActionViewChecksHint {
478        &self.inner
479    }
480}