rtdlib/types/
call_server_type.rs1
2use crate::types::*;
3use crate::errors::*;
4use uuid::Uuid;
5
6
7
8
9use std::fmt::Debug;
10use serde::de::{Deserialize, Deserializer};
11
12
13
14pub trait TDCallServerType: Debug + RObject {}
16
17#[derive(Debug, Clone, Serialize)]
19#[serde(untagged)]
20pub enum CallServerType {
21 #[doc(hidden)] _Default(()),
22 TelegramReflector(CallServerTypeTelegramReflector),
24 Webrtc(CallServerTypeWebrtc),
26
27}
28
29impl Default for CallServerType {
30 fn default() -> Self { CallServerType::_Default(()) }
31}
32
33impl<'de> Deserialize<'de> for CallServerType {
34 fn deserialize<D>(deserializer: D) -> Result<CallServerType, D::Error> where D: Deserializer<'de> {
35 use serde::de::Error;
36 rtd_enum_deserialize!(
37 CallServerType,
38 (callServerTypeTelegramReflector, TelegramReflector);
39 (callServerTypeWebrtc, Webrtc);
40
41 )(deserializer)
42 }
43}
44
45impl RObject for CallServerType {
46 #[doc(hidden)] fn td_name(&self) -> &'static str {
47 match self {
48 CallServerType::TelegramReflector(t) => t.td_name(),
49 CallServerType::Webrtc(t) => t.td_name(),
50
51 _ => "-1",
52 }
53 }
54 #[doc(hidden)] fn extra(&self) -> Option<String> {
55 match self {
56 CallServerType::TelegramReflector(t) => t.extra(),
57 CallServerType::Webrtc(t) => t.extra(),
58
59 _ => None,
60 }
61 }
62 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
63}
64
65impl CallServerType {
66 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
67 #[doc(hidden)] pub fn _is_default(&self) -> bool { if let CallServerType::_Default(_) = self { true } else { false } }
68
69 pub fn is_telegram_reflector(&self) -> bool { if let CallServerType::TelegramReflector(_) = self { true } else { false } }
70 pub fn is_webrtc(&self) -> bool { if let CallServerType::Webrtc(_) = self { true } else { false } }
71
72 pub fn on_telegram_reflector<F: FnOnce(&CallServerTypeTelegramReflector)>(&self, fnc: F) -> &Self { if let CallServerType::TelegramReflector(t) = self { fnc(t) }; self }
73 pub fn on_webrtc<F: FnOnce(&CallServerTypeWebrtc)>(&self, fnc: F) -> &Self { if let CallServerType::Webrtc(t) = self { fnc(t) }; self }
74
75 pub fn as_telegram_reflector(&self) -> Option<&CallServerTypeTelegramReflector> { if let CallServerType::TelegramReflector(t) = self { return Some(t) } None }
76 pub fn as_webrtc(&self) -> Option<&CallServerTypeWebrtc> { if let CallServerType::Webrtc(t) = self { return Some(t) } None }
77
78
79
80 pub fn telegram_reflector<T: AsRef<CallServerTypeTelegramReflector>>(t: T) -> Self { CallServerType::TelegramReflector(t.as_ref().clone()) }
81
82 pub fn webrtc<T: AsRef<CallServerTypeWebrtc>>(t: T) -> Self { CallServerType::Webrtc(t.as_ref().clone()) }
83
84}
85
86impl AsRef<CallServerType> for CallServerType {
87 fn as_ref(&self) -> &CallServerType { self }
88}
89
90
91
92
93
94
95
96#[derive(Debug, Clone, Default, Serialize, Deserialize)]
98pub struct CallServerTypeTelegramReflector {
99 #[doc(hidden)]
100 #[serde(rename(serialize = "@type", deserialize = "@type"))]
101 td_name: String,
102 #[doc(hidden)]
103 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
104 extra: Option<String>,
105 peer_tag: String,
107
108}
109
110impl RObject for CallServerTypeTelegramReflector {
111 #[doc(hidden)] fn td_name(&self) -> &'static str { "callServerTypeTelegramReflector" }
112 #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
113 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
114}
115
116
117impl TDCallServerType for CallServerTypeTelegramReflector {}
118
119
120
121impl CallServerTypeTelegramReflector {
122 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
123 pub fn builder() -> RTDCallServerTypeTelegramReflectorBuilder {
124 let mut inner = CallServerTypeTelegramReflector::default();
125 inner.td_name = "callServerTypeTelegramReflector".to_string();
126 inner.extra = Some(Uuid::new_v4().to_string());
127 RTDCallServerTypeTelegramReflectorBuilder { inner }
128 }
129
130 pub fn peer_tag(&self) -> &String { &self.peer_tag }
131
132}
133
134#[doc(hidden)]
135pub struct RTDCallServerTypeTelegramReflectorBuilder {
136 inner: CallServerTypeTelegramReflector
137}
138
139impl RTDCallServerTypeTelegramReflectorBuilder {
140 pub fn build(&self) -> CallServerTypeTelegramReflector { self.inner.clone() }
141
142
143 pub fn peer_tag<T: AsRef<str>>(&mut self, peer_tag: T) -> &mut Self {
144 self.inner.peer_tag = peer_tag.as_ref().to_string();
145 self
146 }
147
148}
149
150impl AsRef<CallServerTypeTelegramReflector> for CallServerTypeTelegramReflector {
151 fn as_ref(&self) -> &CallServerTypeTelegramReflector { self }
152}
153
154impl AsRef<CallServerTypeTelegramReflector> for RTDCallServerTypeTelegramReflectorBuilder {
155 fn as_ref(&self) -> &CallServerTypeTelegramReflector { &self.inner }
156}
157
158
159
160
161
162
163
164#[derive(Debug, Clone, Default, Serialize, Deserialize)]
166pub struct CallServerTypeWebrtc {
167 #[doc(hidden)]
168 #[serde(rename(serialize = "@type", deserialize = "@type"))]
169 td_name: String,
170 #[doc(hidden)]
171 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
172 extra: Option<String>,
173 username: String,
175 password: String,
177 supports_turn: bool,
179 supports_stun: bool,
181
182}
183
184impl RObject for CallServerTypeWebrtc {
185 #[doc(hidden)] fn td_name(&self) -> &'static str { "callServerTypeWebrtc" }
186 #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
187 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
188}
189
190
191impl TDCallServerType for CallServerTypeWebrtc {}
192
193
194
195impl CallServerTypeWebrtc {
196 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
197 pub fn builder() -> RTDCallServerTypeWebrtcBuilder {
198 let mut inner = CallServerTypeWebrtc::default();
199 inner.td_name = "callServerTypeWebrtc".to_string();
200 inner.extra = Some(Uuid::new_v4().to_string());
201 RTDCallServerTypeWebrtcBuilder { inner }
202 }
203
204 pub fn username(&self) -> &String { &self.username }
205
206 pub fn password(&self) -> &String { &self.password }
207
208 pub fn supports_turn(&self) -> bool { self.supports_turn }
209
210 pub fn supports_stun(&self) -> bool { self.supports_stun }
211
212}
213
214#[doc(hidden)]
215pub struct RTDCallServerTypeWebrtcBuilder {
216 inner: CallServerTypeWebrtc
217}
218
219impl RTDCallServerTypeWebrtcBuilder {
220 pub fn build(&self) -> CallServerTypeWebrtc { self.inner.clone() }
221
222
223 pub fn username<T: AsRef<str>>(&mut self, username: T) -> &mut Self {
224 self.inner.username = username.as_ref().to_string();
225 self
226 }
227
228
229 pub fn password<T: AsRef<str>>(&mut self, password: T) -> &mut Self {
230 self.inner.password = password.as_ref().to_string();
231 self
232 }
233
234
235 pub fn supports_turn(&mut self, supports_turn: bool) -> &mut Self {
236 self.inner.supports_turn = supports_turn;
237 self
238 }
239
240
241 pub fn supports_stun(&mut self, supports_stun: bool) -> &mut Self {
242 self.inner.supports_stun = supports_stun;
243 self
244 }
245
246}
247
248impl AsRef<CallServerTypeWebrtc> for CallServerTypeWebrtc {
249 fn as_ref(&self) -> &CallServerTypeWebrtc { self }
250}
251
252impl AsRef<CallServerTypeWebrtc> for RTDCallServerTypeWebrtcBuilder {
253 fn as_ref(&self) -> &CallServerTypeWebrtc { &self.inner }
254}
255
256
257