1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDCallState: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum CallState {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "callStateDiscarded")]
19 Discarded(CallStateDiscarded),
20 #[serde(rename = "callStateError")]
22 Error(CallStateError),
23 #[serde(rename = "callStateExchangingKeys")]
25 ExchangingKeys(CallStateExchangingKeys),
26 #[serde(rename = "callStateHangingUp")]
28 HangingUp(CallStateHangingUp),
29 #[serde(rename = "callStatePending")]
31 Pending(CallStatePending),
32 #[serde(rename = "callStateReady")]
34 Ready(CallStateReady),
35}
36
37impl RObject for CallState {
38 #[doc(hidden)]
39 fn extra(&self) -> Option<&str> {
40 match self {
41 CallState::Discarded(t) => t.extra(),
42 CallState::Error(t) => t.extra(),
43 CallState::ExchangingKeys(t) => t.extra(),
44 CallState::HangingUp(t) => t.extra(),
45 CallState::Pending(t) => t.extra(),
46 CallState::Ready(t) => t.extra(),
47
48 _ => None,
49 }
50 }
51 #[doc(hidden)]
52 fn client_id(&self) -> Option<i32> {
53 match self {
54 CallState::Discarded(t) => t.client_id(),
55 CallState::Error(t) => t.client_id(),
56 CallState::ExchangingKeys(t) => t.client_id(),
57 CallState::HangingUp(t) => t.client_id(),
58 CallState::Pending(t) => t.client_id(),
59 CallState::Ready(t) => t.client_id(),
60
61 _ => None,
62 }
63 }
64}
65
66impl CallState {
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, CallState::_Default)
73 }
74}
75
76impl AsRef<CallState> for CallState {
77 fn as_ref(&self) -> &CallState {
78 self
79 }
80}
81
82#[derive(Debug, Clone, Default, Serialize, Deserialize)]
84pub struct CallStateDiscarded {
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 #[serde(skip_serializing_if = "CallDiscardReason::_is_default")]
93 reason: CallDiscardReason,
94 #[serde(default)]
97 need_rating: bool,
98 #[serde(default)]
101 need_debug_information: bool,
102}
103
104impl RObject for CallStateDiscarded {
105 #[doc(hidden)]
106 fn extra(&self) -> Option<&str> {
107 self.extra.as_deref()
108 }
109 #[doc(hidden)]
110 fn client_id(&self) -> Option<i32> {
111 self.client_id
112 }
113}
114
115impl TDCallState for CallStateDiscarded {}
116
117impl CallStateDiscarded {
118 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
119 Ok(serde_json::from_str(json.as_ref())?)
120 }
121 pub fn builder() -> CallStateDiscardedBuilder {
122 let mut inner = CallStateDiscarded::default();
123 inner.extra = Some(Uuid::new_v4().to_string());
124
125 CallStateDiscardedBuilder { inner }
126 }
127
128 pub fn reason(&self) -> &CallDiscardReason {
129 &self.reason
130 }
131
132 pub fn need_rating(&self) -> bool {
133 self.need_rating
134 }
135
136 pub fn need_debug_information(&self) -> bool {
137 self.need_debug_information
138 }
139}
140
141#[doc(hidden)]
142pub struct CallStateDiscardedBuilder {
143 inner: CallStateDiscarded,
144}
145
146#[deprecated]
147pub type RTDCallStateDiscardedBuilder = CallStateDiscardedBuilder;
148
149impl CallStateDiscardedBuilder {
150 pub fn build(&self) -> CallStateDiscarded {
151 self.inner.clone()
152 }
153
154 pub fn reason<T: AsRef<CallDiscardReason>>(&mut self, reason: T) -> &mut Self {
155 self.inner.reason = reason.as_ref().clone();
156 self
157 }
158
159 pub fn need_rating(&mut self, need_rating: bool) -> &mut Self {
160 self.inner.need_rating = need_rating;
161 self
162 }
163
164 pub fn need_debug_information(&mut self, need_debug_information: bool) -> &mut Self {
165 self.inner.need_debug_information = need_debug_information;
166 self
167 }
168}
169
170impl AsRef<CallStateDiscarded> for CallStateDiscarded {
171 fn as_ref(&self) -> &CallStateDiscarded {
172 self
173 }
174}
175
176impl AsRef<CallStateDiscarded> for CallStateDiscardedBuilder {
177 fn as_ref(&self) -> &CallStateDiscarded {
178 &self.inner
179 }
180}
181
182#[derive(Debug, Clone, Default, Serialize, Deserialize)]
184pub struct CallStateError {
185 #[doc(hidden)]
186 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
187 extra: Option<String>,
188 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
189 client_id: Option<i32>,
190 error: Error,
192}
193
194impl RObject for CallStateError {
195 #[doc(hidden)]
196 fn extra(&self) -> Option<&str> {
197 self.extra.as_deref()
198 }
199 #[doc(hidden)]
200 fn client_id(&self) -> Option<i32> {
201 self.client_id
202 }
203}
204
205impl TDCallState for CallStateError {}
206
207impl CallStateError {
208 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
209 Ok(serde_json::from_str(json.as_ref())?)
210 }
211 pub fn builder() -> CallStateErrorBuilder {
212 let mut inner = CallStateError::default();
213 inner.extra = Some(Uuid::new_v4().to_string());
214
215 CallStateErrorBuilder { inner }
216 }
217
218 pub fn error(&self) -> &Error {
219 &self.error
220 }
221}
222
223#[doc(hidden)]
224pub struct CallStateErrorBuilder {
225 inner: CallStateError,
226}
227
228#[deprecated]
229pub type RTDCallStateErrorBuilder = CallStateErrorBuilder;
230
231impl CallStateErrorBuilder {
232 pub fn build(&self) -> CallStateError {
233 self.inner.clone()
234 }
235
236 pub fn error<T: AsRef<Error>>(&mut self, error: T) -> &mut Self {
237 self.inner.error = error.as_ref().clone();
238 self
239 }
240}
241
242impl AsRef<CallStateError> for CallStateError {
243 fn as_ref(&self) -> &CallStateError {
244 self
245 }
246}
247
248impl AsRef<CallStateError> for CallStateErrorBuilder {
249 fn as_ref(&self) -> &CallStateError {
250 &self.inner
251 }
252}
253
254#[derive(Debug, Clone, Default, Serialize, Deserialize)]
256pub struct CallStateExchangingKeys {
257 #[doc(hidden)]
258 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
259 extra: Option<String>,
260 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
261 client_id: Option<i32>,
262}
263
264impl RObject for CallStateExchangingKeys {
265 #[doc(hidden)]
266 fn extra(&self) -> Option<&str> {
267 self.extra.as_deref()
268 }
269 #[doc(hidden)]
270 fn client_id(&self) -> Option<i32> {
271 self.client_id
272 }
273}
274
275impl TDCallState for CallStateExchangingKeys {}
276
277impl CallStateExchangingKeys {
278 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
279 Ok(serde_json::from_str(json.as_ref())?)
280 }
281 pub fn builder() -> CallStateExchangingKeysBuilder {
282 let mut inner = CallStateExchangingKeys::default();
283 inner.extra = Some(Uuid::new_v4().to_string());
284
285 CallStateExchangingKeysBuilder { inner }
286 }
287}
288
289#[doc(hidden)]
290pub struct CallStateExchangingKeysBuilder {
291 inner: CallStateExchangingKeys,
292}
293
294#[deprecated]
295pub type RTDCallStateExchangingKeysBuilder = CallStateExchangingKeysBuilder;
296
297impl CallStateExchangingKeysBuilder {
298 pub fn build(&self) -> CallStateExchangingKeys {
299 self.inner.clone()
300 }
301}
302
303impl AsRef<CallStateExchangingKeys> for CallStateExchangingKeys {
304 fn as_ref(&self) -> &CallStateExchangingKeys {
305 self
306 }
307}
308
309impl AsRef<CallStateExchangingKeys> for CallStateExchangingKeysBuilder {
310 fn as_ref(&self) -> &CallStateExchangingKeys {
311 &self.inner
312 }
313}
314
315#[derive(Debug, Clone, Default, Serialize, Deserialize)]
317pub struct CallStateHangingUp {
318 #[doc(hidden)]
319 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
320 extra: Option<String>,
321 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
322 client_id: Option<i32>,
323}
324
325impl RObject for CallStateHangingUp {
326 #[doc(hidden)]
327 fn extra(&self) -> Option<&str> {
328 self.extra.as_deref()
329 }
330 #[doc(hidden)]
331 fn client_id(&self) -> Option<i32> {
332 self.client_id
333 }
334}
335
336impl TDCallState for CallStateHangingUp {}
337
338impl CallStateHangingUp {
339 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
340 Ok(serde_json::from_str(json.as_ref())?)
341 }
342 pub fn builder() -> CallStateHangingUpBuilder {
343 let mut inner = CallStateHangingUp::default();
344 inner.extra = Some(Uuid::new_v4().to_string());
345
346 CallStateHangingUpBuilder { inner }
347 }
348}
349
350#[doc(hidden)]
351pub struct CallStateHangingUpBuilder {
352 inner: CallStateHangingUp,
353}
354
355#[deprecated]
356pub type RTDCallStateHangingUpBuilder = CallStateHangingUpBuilder;
357
358impl CallStateHangingUpBuilder {
359 pub fn build(&self) -> CallStateHangingUp {
360 self.inner.clone()
361 }
362}
363
364impl AsRef<CallStateHangingUp> for CallStateHangingUp {
365 fn as_ref(&self) -> &CallStateHangingUp {
366 self
367 }
368}
369
370impl AsRef<CallStateHangingUp> for CallStateHangingUpBuilder {
371 fn as_ref(&self) -> &CallStateHangingUp {
372 &self.inner
373 }
374}
375
376#[derive(Debug, Clone, Default, Serialize, Deserialize)]
378pub struct CallStatePending {
379 #[doc(hidden)]
380 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
381 extra: Option<String>,
382 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
383 client_id: Option<i32>,
384 #[serde(default)]
387 is_created: bool,
388 #[serde(default)]
391 is_received: bool,
392}
393
394impl RObject for CallStatePending {
395 #[doc(hidden)]
396 fn extra(&self) -> Option<&str> {
397 self.extra.as_deref()
398 }
399 #[doc(hidden)]
400 fn client_id(&self) -> Option<i32> {
401 self.client_id
402 }
403}
404
405impl TDCallState for CallStatePending {}
406
407impl CallStatePending {
408 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
409 Ok(serde_json::from_str(json.as_ref())?)
410 }
411 pub fn builder() -> CallStatePendingBuilder {
412 let mut inner = CallStatePending::default();
413 inner.extra = Some(Uuid::new_v4().to_string());
414
415 CallStatePendingBuilder { inner }
416 }
417
418 pub fn is_created(&self) -> bool {
419 self.is_created
420 }
421
422 pub fn is_received(&self) -> bool {
423 self.is_received
424 }
425}
426
427#[doc(hidden)]
428pub struct CallStatePendingBuilder {
429 inner: CallStatePending,
430}
431
432#[deprecated]
433pub type RTDCallStatePendingBuilder = CallStatePendingBuilder;
434
435impl CallStatePendingBuilder {
436 pub fn build(&self) -> CallStatePending {
437 self.inner.clone()
438 }
439
440 pub fn is_created(&mut self, is_created: bool) -> &mut Self {
441 self.inner.is_created = is_created;
442 self
443 }
444
445 pub fn is_received(&mut self, is_received: bool) -> &mut Self {
446 self.inner.is_received = is_received;
447 self
448 }
449}
450
451impl AsRef<CallStatePending> for CallStatePending {
452 fn as_ref(&self) -> &CallStatePending {
453 self
454 }
455}
456
457impl AsRef<CallStatePending> for CallStatePendingBuilder {
458 fn as_ref(&self) -> &CallStatePending {
459 &self.inner
460 }
461}
462
463#[derive(Debug, Clone, Default, Serialize, Deserialize)]
465pub struct CallStateReady {
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 protocol: CallProtocol,
473 #[serde(default)]
476 servers: Vec<CallServer>,
477 #[serde(default)]
480 config: String,
481 #[serde(default)]
484 encryption_key: String,
485 #[serde(default)]
488 emojis: Vec<String>,
489 #[serde(default)]
492 allow_p2p: bool,
493}
494
495impl RObject for CallStateReady {
496 #[doc(hidden)]
497 fn extra(&self) -> Option<&str> {
498 self.extra.as_deref()
499 }
500 #[doc(hidden)]
501 fn client_id(&self) -> Option<i32> {
502 self.client_id
503 }
504}
505
506impl TDCallState for CallStateReady {}
507
508impl CallStateReady {
509 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
510 Ok(serde_json::from_str(json.as_ref())?)
511 }
512 pub fn builder() -> CallStateReadyBuilder {
513 let mut inner = CallStateReady::default();
514 inner.extra = Some(Uuid::new_v4().to_string());
515
516 CallStateReadyBuilder { inner }
517 }
518
519 pub fn protocol(&self) -> &CallProtocol {
520 &self.protocol
521 }
522
523 pub fn servers(&self) -> &Vec<CallServer> {
524 &self.servers
525 }
526
527 pub fn config(&self) -> &String {
528 &self.config
529 }
530
531 pub fn encryption_key(&self) -> &String {
532 &self.encryption_key
533 }
534
535 pub fn emojis(&self) -> &Vec<String> {
536 &self.emojis
537 }
538
539 pub fn allow_p2p(&self) -> bool {
540 self.allow_p2p
541 }
542}
543
544#[doc(hidden)]
545pub struct CallStateReadyBuilder {
546 inner: CallStateReady,
547}
548
549#[deprecated]
550pub type RTDCallStateReadyBuilder = CallStateReadyBuilder;
551
552impl CallStateReadyBuilder {
553 pub fn build(&self) -> CallStateReady {
554 self.inner.clone()
555 }
556
557 pub fn protocol<T: AsRef<CallProtocol>>(&mut self, protocol: T) -> &mut Self {
558 self.inner.protocol = protocol.as_ref().clone();
559 self
560 }
561
562 pub fn servers(&mut self, servers: Vec<CallServer>) -> &mut Self {
563 self.inner.servers = servers;
564 self
565 }
566
567 pub fn config<T: AsRef<str>>(&mut self, config: T) -> &mut Self {
568 self.inner.config = config.as_ref().to_string();
569 self
570 }
571
572 pub fn encryption_key<T: AsRef<str>>(&mut self, encryption_key: T) -> &mut Self {
573 self.inner.encryption_key = encryption_key.as_ref().to_string();
574 self
575 }
576
577 pub fn emojis(&mut self, emojis: Vec<String>) -> &mut Self {
578 self.inner.emojis = emojis;
579 self
580 }
581
582 pub fn allow_p2p(&mut self, allow_p2p: bool) -> &mut Self {
583 self.inner.allow_p2p = allow_p2p;
584 self
585 }
586}
587
588impl AsRef<CallStateReady> for CallStateReady {
589 fn as_ref(&self) -> &CallStateReady {
590 self
591 }
592}
593
594impl AsRef<CallStateReady> for CallStateReadyBuilder {
595 fn as_ref(&self) -> &CallStateReady {
596 &self.inner
597 }
598}