rust_tdlib/types/
call_problem.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Describes the exact type of a problem with a call
8pub trait TDCallProblem: Debug + RObject {}
9
10/// Describes the exact type of a problem with a call
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum CallProblem {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// The speech was distorted
18    #[serde(rename = "callProblemDistortedSpeech")]
19    DistortedSpeech(CallProblemDistortedSpeech),
20    /// The video was distorted
21    #[serde(rename = "callProblemDistortedVideo")]
22    DistortedVideo(CallProblemDistortedVideo),
23    /// The call ended unexpectedly
24    #[serde(rename = "callProblemDropped")]
25    Dropped(CallProblemDropped),
26    /// The user heard their own voice
27    #[serde(rename = "callProblemEcho")]
28    Echo(CallProblemEcho),
29    /// The other side kept disappearing
30    #[serde(rename = "callProblemInterruptions")]
31    Interruptions(CallProblemInterruptions),
32    /// The user heard background noise
33    #[serde(rename = "callProblemNoise")]
34    Noise(CallProblemNoise),
35    /// The video was pixelated
36    #[serde(rename = "callProblemPixelatedVideo")]
37    PixelatedVideo(CallProblemPixelatedVideo),
38    /// The user couldn't hear the other side
39    #[serde(rename = "callProblemSilentLocal")]
40    SilentLocal(CallProblemSilentLocal),
41    /// The other side couldn't hear the user
42    #[serde(rename = "callProblemSilentRemote")]
43    SilentRemote(CallProblemSilentRemote),
44}
45
46impl RObject for CallProblem {
47    #[doc(hidden)]
48    fn extra(&self) -> Option<&str> {
49        match self {
50            CallProblem::DistortedSpeech(t) => t.extra(),
51            CallProblem::DistortedVideo(t) => t.extra(),
52            CallProblem::Dropped(t) => t.extra(),
53            CallProblem::Echo(t) => t.extra(),
54            CallProblem::Interruptions(t) => t.extra(),
55            CallProblem::Noise(t) => t.extra(),
56            CallProblem::PixelatedVideo(t) => t.extra(),
57            CallProblem::SilentLocal(t) => t.extra(),
58            CallProblem::SilentRemote(t) => t.extra(),
59
60            _ => None,
61        }
62    }
63    #[doc(hidden)]
64    fn client_id(&self) -> Option<i32> {
65        match self {
66            CallProblem::DistortedSpeech(t) => t.client_id(),
67            CallProblem::DistortedVideo(t) => t.client_id(),
68            CallProblem::Dropped(t) => t.client_id(),
69            CallProblem::Echo(t) => t.client_id(),
70            CallProblem::Interruptions(t) => t.client_id(),
71            CallProblem::Noise(t) => t.client_id(),
72            CallProblem::PixelatedVideo(t) => t.client_id(),
73            CallProblem::SilentLocal(t) => t.client_id(),
74            CallProblem::SilentRemote(t) => t.client_id(),
75
76            _ => None,
77        }
78    }
79}
80
81impl CallProblem {
82    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
83        Ok(serde_json::from_str(json.as_ref())?)
84    }
85    #[doc(hidden)]
86    pub fn _is_default(&self) -> bool {
87        matches!(self, CallProblem::_Default)
88    }
89}
90
91impl AsRef<CallProblem> for CallProblem {
92    fn as_ref(&self) -> &CallProblem {
93        self
94    }
95}
96
97/// The speech was distorted
98#[derive(Debug, Clone, Default, Serialize, Deserialize)]
99pub struct CallProblemDistortedSpeech {
100    #[doc(hidden)]
101    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
102    extra: Option<String>,
103    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
104    client_id: Option<i32>,
105}
106
107impl RObject for CallProblemDistortedSpeech {
108    #[doc(hidden)]
109    fn extra(&self) -> Option<&str> {
110        self.extra.as_deref()
111    }
112    #[doc(hidden)]
113    fn client_id(&self) -> Option<i32> {
114        self.client_id
115    }
116}
117
118impl TDCallProblem for CallProblemDistortedSpeech {}
119
120impl CallProblemDistortedSpeech {
121    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
122        Ok(serde_json::from_str(json.as_ref())?)
123    }
124    pub fn builder() -> CallProblemDistortedSpeechBuilder {
125        let mut inner = CallProblemDistortedSpeech::default();
126        inner.extra = Some(Uuid::new_v4().to_string());
127
128        CallProblemDistortedSpeechBuilder { inner }
129    }
130}
131
132#[doc(hidden)]
133pub struct CallProblemDistortedSpeechBuilder {
134    inner: CallProblemDistortedSpeech,
135}
136
137#[deprecated]
138pub type RTDCallProblemDistortedSpeechBuilder = CallProblemDistortedSpeechBuilder;
139
140impl CallProblemDistortedSpeechBuilder {
141    pub fn build(&self) -> CallProblemDistortedSpeech {
142        self.inner.clone()
143    }
144}
145
146impl AsRef<CallProblemDistortedSpeech> for CallProblemDistortedSpeech {
147    fn as_ref(&self) -> &CallProblemDistortedSpeech {
148        self
149    }
150}
151
152impl AsRef<CallProblemDistortedSpeech> for CallProblemDistortedSpeechBuilder {
153    fn as_ref(&self) -> &CallProblemDistortedSpeech {
154        &self.inner
155    }
156}
157
158/// The video was distorted
159#[derive(Debug, Clone, Default, Serialize, Deserialize)]
160pub struct CallProblemDistortedVideo {
161    #[doc(hidden)]
162    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
163    extra: Option<String>,
164    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
165    client_id: Option<i32>,
166}
167
168impl RObject for CallProblemDistortedVideo {
169    #[doc(hidden)]
170    fn extra(&self) -> Option<&str> {
171        self.extra.as_deref()
172    }
173    #[doc(hidden)]
174    fn client_id(&self) -> Option<i32> {
175        self.client_id
176    }
177}
178
179impl TDCallProblem for CallProblemDistortedVideo {}
180
181impl CallProblemDistortedVideo {
182    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
183        Ok(serde_json::from_str(json.as_ref())?)
184    }
185    pub fn builder() -> CallProblemDistortedVideoBuilder {
186        let mut inner = CallProblemDistortedVideo::default();
187        inner.extra = Some(Uuid::new_v4().to_string());
188
189        CallProblemDistortedVideoBuilder { inner }
190    }
191}
192
193#[doc(hidden)]
194pub struct CallProblemDistortedVideoBuilder {
195    inner: CallProblemDistortedVideo,
196}
197
198#[deprecated]
199pub type RTDCallProblemDistortedVideoBuilder = CallProblemDistortedVideoBuilder;
200
201impl CallProblemDistortedVideoBuilder {
202    pub fn build(&self) -> CallProblemDistortedVideo {
203        self.inner.clone()
204    }
205}
206
207impl AsRef<CallProblemDistortedVideo> for CallProblemDistortedVideo {
208    fn as_ref(&self) -> &CallProblemDistortedVideo {
209        self
210    }
211}
212
213impl AsRef<CallProblemDistortedVideo> for CallProblemDistortedVideoBuilder {
214    fn as_ref(&self) -> &CallProblemDistortedVideo {
215        &self.inner
216    }
217}
218
219/// The call ended unexpectedly
220#[derive(Debug, Clone, Default, Serialize, Deserialize)]
221pub struct CallProblemDropped {
222    #[doc(hidden)]
223    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
224    extra: Option<String>,
225    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
226    client_id: Option<i32>,
227}
228
229impl RObject for CallProblemDropped {
230    #[doc(hidden)]
231    fn extra(&self) -> Option<&str> {
232        self.extra.as_deref()
233    }
234    #[doc(hidden)]
235    fn client_id(&self) -> Option<i32> {
236        self.client_id
237    }
238}
239
240impl TDCallProblem for CallProblemDropped {}
241
242impl CallProblemDropped {
243    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
244        Ok(serde_json::from_str(json.as_ref())?)
245    }
246    pub fn builder() -> CallProblemDroppedBuilder {
247        let mut inner = CallProblemDropped::default();
248        inner.extra = Some(Uuid::new_v4().to_string());
249
250        CallProblemDroppedBuilder { inner }
251    }
252}
253
254#[doc(hidden)]
255pub struct CallProblemDroppedBuilder {
256    inner: CallProblemDropped,
257}
258
259#[deprecated]
260pub type RTDCallProblemDroppedBuilder = CallProblemDroppedBuilder;
261
262impl CallProblemDroppedBuilder {
263    pub fn build(&self) -> CallProblemDropped {
264        self.inner.clone()
265    }
266}
267
268impl AsRef<CallProblemDropped> for CallProblemDropped {
269    fn as_ref(&self) -> &CallProblemDropped {
270        self
271    }
272}
273
274impl AsRef<CallProblemDropped> for CallProblemDroppedBuilder {
275    fn as_ref(&self) -> &CallProblemDropped {
276        &self.inner
277    }
278}
279
280/// The user heard their own voice
281#[derive(Debug, Clone, Default, Serialize, Deserialize)]
282pub struct CallProblemEcho {
283    #[doc(hidden)]
284    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
285    extra: Option<String>,
286    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
287    client_id: Option<i32>,
288}
289
290impl RObject for CallProblemEcho {
291    #[doc(hidden)]
292    fn extra(&self) -> Option<&str> {
293        self.extra.as_deref()
294    }
295    #[doc(hidden)]
296    fn client_id(&self) -> Option<i32> {
297        self.client_id
298    }
299}
300
301impl TDCallProblem for CallProblemEcho {}
302
303impl CallProblemEcho {
304    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
305        Ok(serde_json::from_str(json.as_ref())?)
306    }
307    pub fn builder() -> CallProblemEchoBuilder {
308        let mut inner = CallProblemEcho::default();
309        inner.extra = Some(Uuid::new_v4().to_string());
310
311        CallProblemEchoBuilder { inner }
312    }
313}
314
315#[doc(hidden)]
316pub struct CallProblemEchoBuilder {
317    inner: CallProblemEcho,
318}
319
320#[deprecated]
321pub type RTDCallProblemEchoBuilder = CallProblemEchoBuilder;
322
323impl CallProblemEchoBuilder {
324    pub fn build(&self) -> CallProblemEcho {
325        self.inner.clone()
326    }
327}
328
329impl AsRef<CallProblemEcho> for CallProblemEcho {
330    fn as_ref(&self) -> &CallProblemEcho {
331        self
332    }
333}
334
335impl AsRef<CallProblemEcho> for CallProblemEchoBuilder {
336    fn as_ref(&self) -> &CallProblemEcho {
337        &self.inner
338    }
339}
340
341/// The other side kept disappearing
342#[derive(Debug, Clone, Default, Serialize, Deserialize)]
343pub struct CallProblemInterruptions {
344    #[doc(hidden)]
345    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
346    extra: Option<String>,
347    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
348    client_id: Option<i32>,
349}
350
351impl RObject for CallProblemInterruptions {
352    #[doc(hidden)]
353    fn extra(&self) -> Option<&str> {
354        self.extra.as_deref()
355    }
356    #[doc(hidden)]
357    fn client_id(&self) -> Option<i32> {
358        self.client_id
359    }
360}
361
362impl TDCallProblem for CallProblemInterruptions {}
363
364impl CallProblemInterruptions {
365    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
366        Ok(serde_json::from_str(json.as_ref())?)
367    }
368    pub fn builder() -> CallProblemInterruptionsBuilder {
369        let mut inner = CallProblemInterruptions::default();
370        inner.extra = Some(Uuid::new_v4().to_string());
371
372        CallProblemInterruptionsBuilder { inner }
373    }
374}
375
376#[doc(hidden)]
377pub struct CallProblemInterruptionsBuilder {
378    inner: CallProblemInterruptions,
379}
380
381#[deprecated]
382pub type RTDCallProblemInterruptionsBuilder = CallProblemInterruptionsBuilder;
383
384impl CallProblemInterruptionsBuilder {
385    pub fn build(&self) -> CallProblemInterruptions {
386        self.inner.clone()
387    }
388}
389
390impl AsRef<CallProblemInterruptions> for CallProblemInterruptions {
391    fn as_ref(&self) -> &CallProblemInterruptions {
392        self
393    }
394}
395
396impl AsRef<CallProblemInterruptions> for CallProblemInterruptionsBuilder {
397    fn as_ref(&self) -> &CallProblemInterruptions {
398        &self.inner
399    }
400}
401
402/// The user heard background noise
403#[derive(Debug, Clone, Default, Serialize, Deserialize)]
404pub struct CallProblemNoise {
405    #[doc(hidden)]
406    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
407    extra: Option<String>,
408    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
409    client_id: Option<i32>,
410}
411
412impl RObject for CallProblemNoise {
413    #[doc(hidden)]
414    fn extra(&self) -> Option<&str> {
415        self.extra.as_deref()
416    }
417    #[doc(hidden)]
418    fn client_id(&self) -> Option<i32> {
419        self.client_id
420    }
421}
422
423impl TDCallProblem for CallProblemNoise {}
424
425impl CallProblemNoise {
426    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
427        Ok(serde_json::from_str(json.as_ref())?)
428    }
429    pub fn builder() -> CallProblemNoiseBuilder {
430        let mut inner = CallProblemNoise::default();
431        inner.extra = Some(Uuid::new_v4().to_string());
432
433        CallProblemNoiseBuilder { inner }
434    }
435}
436
437#[doc(hidden)]
438pub struct CallProblemNoiseBuilder {
439    inner: CallProblemNoise,
440}
441
442#[deprecated]
443pub type RTDCallProblemNoiseBuilder = CallProblemNoiseBuilder;
444
445impl CallProblemNoiseBuilder {
446    pub fn build(&self) -> CallProblemNoise {
447        self.inner.clone()
448    }
449}
450
451impl AsRef<CallProblemNoise> for CallProblemNoise {
452    fn as_ref(&self) -> &CallProblemNoise {
453        self
454    }
455}
456
457impl AsRef<CallProblemNoise> for CallProblemNoiseBuilder {
458    fn as_ref(&self) -> &CallProblemNoise {
459        &self.inner
460    }
461}
462
463/// The video was pixelated
464#[derive(Debug, Clone, Default, Serialize, Deserialize)]
465pub struct CallProblemPixelatedVideo {
466    #[doc(hidden)]
467    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
468    extra: Option<String>,
469    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
470    client_id: Option<i32>,
471}
472
473impl RObject for CallProblemPixelatedVideo {
474    #[doc(hidden)]
475    fn extra(&self) -> Option<&str> {
476        self.extra.as_deref()
477    }
478    #[doc(hidden)]
479    fn client_id(&self) -> Option<i32> {
480        self.client_id
481    }
482}
483
484impl TDCallProblem for CallProblemPixelatedVideo {}
485
486impl CallProblemPixelatedVideo {
487    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
488        Ok(serde_json::from_str(json.as_ref())?)
489    }
490    pub fn builder() -> CallProblemPixelatedVideoBuilder {
491        let mut inner = CallProblemPixelatedVideo::default();
492        inner.extra = Some(Uuid::new_v4().to_string());
493
494        CallProblemPixelatedVideoBuilder { inner }
495    }
496}
497
498#[doc(hidden)]
499pub struct CallProblemPixelatedVideoBuilder {
500    inner: CallProblemPixelatedVideo,
501}
502
503#[deprecated]
504pub type RTDCallProblemPixelatedVideoBuilder = CallProblemPixelatedVideoBuilder;
505
506impl CallProblemPixelatedVideoBuilder {
507    pub fn build(&self) -> CallProblemPixelatedVideo {
508        self.inner.clone()
509    }
510}
511
512impl AsRef<CallProblemPixelatedVideo> for CallProblemPixelatedVideo {
513    fn as_ref(&self) -> &CallProblemPixelatedVideo {
514        self
515    }
516}
517
518impl AsRef<CallProblemPixelatedVideo> for CallProblemPixelatedVideoBuilder {
519    fn as_ref(&self) -> &CallProblemPixelatedVideo {
520        &self.inner
521    }
522}
523
524/// The user couldn't hear the other side
525#[derive(Debug, Clone, Default, Serialize, Deserialize)]
526pub struct CallProblemSilentLocal {
527    #[doc(hidden)]
528    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
529    extra: Option<String>,
530    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
531    client_id: Option<i32>,
532}
533
534impl RObject for CallProblemSilentLocal {
535    #[doc(hidden)]
536    fn extra(&self) -> Option<&str> {
537        self.extra.as_deref()
538    }
539    #[doc(hidden)]
540    fn client_id(&self) -> Option<i32> {
541        self.client_id
542    }
543}
544
545impl TDCallProblem for CallProblemSilentLocal {}
546
547impl CallProblemSilentLocal {
548    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
549        Ok(serde_json::from_str(json.as_ref())?)
550    }
551    pub fn builder() -> CallProblemSilentLocalBuilder {
552        let mut inner = CallProblemSilentLocal::default();
553        inner.extra = Some(Uuid::new_v4().to_string());
554
555        CallProblemSilentLocalBuilder { inner }
556    }
557}
558
559#[doc(hidden)]
560pub struct CallProblemSilentLocalBuilder {
561    inner: CallProblemSilentLocal,
562}
563
564#[deprecated]
565pub type RTDCallProblemSilentLocalBuilder = CallProblemSilentLocalBuilder;
566
567impl CallProblemSilentLocalBuilder {
568    pub fn build(&self) -> CallProblemSilentLocal {
569        self.inner.clone()
570    }
571}
572
573impl AsRef<CallProblemSilentLocal> for CallProblemSilentLocal {
574    fn as_ref(&self) -> &CallProblemSilentLocal {
575        self
576    }
577}
578
579impl AsRef<CallProblemSilentLocal> for CallProblemSilentLocalBuilder {
580    fn as_ref(&self) -> &CallProblemSilentLocal {
581        &self.inner
582    }
583}
584
585/// The other side couldn't hear the user
586#[derive(Debug, Clone, Default, Serialize, Deserialize)]
587pub struct CallProblemSilentRemote {
588    #[doc(hidden)]
589    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
590    extra: Option<String>,
591    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
592    client_id: Option<i32>,
593}
594
595impl RObject for CallProblemSilentRemote {
596    #[doc(hidden)]
597    fn extra(&self) -> Option<&str> {
598        self.extra.as_deref()
599    }
600    #[doc(hidden)]
601    fn client_id(&self) -> Option<i32> {
602        self.client_id
603    }
604}
605
606impl TDCallProblem for CallProblemSilentRemote {}
607
608impl CallProblemSilentRemote {
609    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
610        Ok(serde_json::from_str(json.as_ref())?)
611    }
612    pub fn builder() -> CallProblemSilentRemoteBuilder {
613        let mut inner = CallProblemSilentRemote::default();
614        inner.extra = Some(Uuid::new_v4().to_string());
615
616        CallProblemSilentRemoteBuilder { inner }
617    }
618}
619
620#[doc(hidden)]
621pub struct CallProblemSilentRemoteBuilder {
622    inner: CallProblemSilentRemote,
623}
624
625#[deprecated]
626pub type RTDCallProblemSilentRemoteBuilder = CallProblemSilentRemoteBuilder;
627
628impl CallProblemSilentRemoteBuilder {
629    pub fn build(&self) -> CallProblemSilentRemote {
630        self.inner.clone()
631    }
632}
633
634impl AsRef<CallProblemSilentRemote> for CallProblemSilentRemote {
635    fn as_ref(&self) -> &CallProblemSilentRemote {
636        self
637    }
638}
639
640impl AsRef<CallProblemSilentRemote> for CallProblemSilentRemoteBuilder {
641    fn as_ref(&self) -> &CallProblemSilentRemote {
642        &self.inner
643    }
644}