1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDCallProblem: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum CallProblem {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "callProblemDistortedSpeech")]
19 DistortedSpeech(CallProblemDistortedSpeech),
20 #[serde(rename = "callProblemDistortedVideo")]
22 DistortedVideo(CallProblemDistortedVideo),
23 #[serde(rename = "callProblemDropped")]
25 Dropped(CallProblemDropped),
26 #[serde(rename = "callProblemEcho")]
28 Echo(CallProblemEcho),
29 #[serde(rename = "callProblemInterruptions")]
31 Interruptions(CallProblemInterruptions),
32 #[serde(rename = "callProblemNoise")]
34 Noise(CallProblemNoise),
35 #[serde(rename = "callProblemPixelatedVideo")]
37 PixelatedVideo(CallProblemPixelatedVideo),
38 #[serde(rename = "callProblemSilentLocal")]
40 SilentLocal(CallProblemSilentLocal),
41 #[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#[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#[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#[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#[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#[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#[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#[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#[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#[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}