rust_tdlib/types/
json_value.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Represents a JSON value
8pub trait TDJsonValue: Debug + RObject {}
9
10/// Represents a JSON value
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum JsonValue {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// Returns application config, provided by the server. Can be called before authorization
18    #[serde(rename = "getApplicationConfig")]
19    GetApplicationConfig(GetApplicationConfig),
20    /// Converts a JSON-serialized string to corresponding JsonValue object. Can be called synchronously
21    #[serde(rename = "getJsonValue")]
22    GetJsonValue(GetJsonValue),
23    /// Represents a JSON array
24    #[serde(rename = "jsonValueArray")]
25    Array(JsonValueArray),
26    /// Represents a boolean JSON value
27    #[serde(rename = "jsonValueBoolean")]
28    Boolean(JsonValueBoolean),
29    /// Represents a null JSON value
30    #[serde(rename = "jsonValueNull")]
31    Null(JsonValueNull),
32    /// Represents a numeric JSON value
33    #[serde(rename = "jsonValueNumber")]
34    Number(JsonValueNumber),
35    /// Represents a JSON object
36    #[serde(rename = "jsonValueObject")]
37    Object(JsonValueObject),
38    /// Represents a string JSON value
39    #[serde(rename = "jsonValueString")]
40    String(JsonValueString),
41}
42
43impl RObject for JsonValue {
44    #[doc(hidden)]
45    fn extra(&self) -> Option<&str> {
46        match self {
47            JsonValue::GetApplicationConfig(t) => t.extra(),
48            JsonValue::GetJsonValue(t) => t.extra(),
49            JsonValue::Array(t) => t.extra(),
50            JsonValue::Boolean(t) => t.extra(),
51            JsonValue::Null(t) => t.extra(),
52            JsonValue::Number(t) => t.extra(),
53            JsonValue::Object(t) => t.extra(),
54            JsonValue::String(t) => t.extra(),
55
56            _ => None,
57        }
58    }
59    #[doc(hidden)]
60    fn client_id(&self) -> Option<i32> {
61        match self {
62            JsonValue::GetApplicationConfig(t) => t.client_id(),
63            JsonValue::GetJsonValue(t) => t.client_id(),
64            JsonValue::Array(t) => t.client_id(),
65            JsonValue::Boolean(t) => t.client_id(),
66            JsonValue::Null(t) => t.client_id(),
67            JsonValue::Number(t) => t.client_id(),
68            JsonValue::Object(t) => t.client_id(),
69            JsonValue::String(t) => t.client_id(),
70
71            _ => None,
72        }
73    }
74}
75
76impl JsonValue {
77    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
78        Ok(serde_json::from_str(json.as_ref())?)
79    }
80    #[doc(hidden)]
81    pub fn _is_default(&self) -> bool {
82        matches!(self, JsonValue::_Default)
83    }
84}
85
86impl AsRef<JsonValue> for JsonValue {
87    fn as_ref(&self) -> &JsonValue {
88        self
89    }
90}
91
92/// Represents a JSON array
93#[derive(Debug, Clone, Default, Serialize, Deserialize)]
94pub struct JsonValueArray {
95    #[doc(hidden)]
96    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
97    extra: Option<String>,
98    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
99    client_id: Option<i32>,
100    /// The list of array elements
101
102    #[serde(default)]
103    values: Vec<JsonValue>,
104}
105
106impl RObject for JsonValueArray {
107    #[doc(hidden)]
108    fn extra(&self) -> Option<&str> {
109        self.extra.as_deref()
110    }
111    #[doc(hidden)]
112    fn client_id(&self) -> Option<i32> {
113        self.client_id
114    }
115}
116
117impl TDJsonValue for JsonValueArray {}
118
119impl JsonValueArray {
120    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
121        Ok(serde_json::from_str(json.as_ref())?)
122    }
123    pub fn builder() -> JsonValueArrayBuilder {
124        let mut inner = JsonValueArray::default();
125        inner.extra = Some(Uuid::new_v4().to_string());
126
127        JsonValueArrayBuilder { inner }
128    }
129
130    pub fn values(&self) -> &Vec<JsonValue> {
131        &self.values
132    }
133}
134
135#[doc(hidden)]
136pub struct JsonValueArrayBuilder {
137    inner: JsonValueArray,
138}
139
140#[deprecated]
141pub type RTDJsonValueArrayBuilder = JsonValueArrayBuilder;
142
143impl JsonValueArrayBuilder {
144    pub fn build(&self) -> JsonValueArray {
145        self.inner.clone()
146    }
147
148    pub fn values(&mut self, values: Vec<JsonValue>) -> &mut Self {
149        self.inner.values = values;
150        self
151    }
152}
153
154impl AsRef<JsonValueArray> for JsonValueArray {
155    fn as_ref(&self) -> &JsonValueArray {
156        self
157    }
158}
159
160impl AsRef<JsonValueArray> for JsonValueArrayBuilder {
161    fn as_ref(&self) -> &JsonValueArray {
162        &self.inner
163    }
164}
165
166/// Represents a boolean JSON value
167#[derive(Debug, Clone, Default, Serialize, Deserialize)]
168pub struct JsonValueBoolean {
169    #[doc(hidden)]
170    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
171    extra: Option<String>,
172    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
173    client_id: Option<i32>,
174    /// The value
175
176    #[serde(default)]
177    value: bool,
178}
179
180impl RObject for JsonValueBoolean {
181    #[doc(hidden)]
182    fn extra(&self) -> Option<&str> {
183        self.extra.as_deref()
184    }
185    #[doc(hidden)]
186    fn client_id(&self) -> Option<i32> {
187        self.client_id
188    }
189}
190
191impl TDJsonValue for JsonValueBoolean {}
192
193impl JsonValueBoolean {
194    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
195        Ok(serde_json::from_str(json.as_ref())?)
196    }
197    pub fn builder() -> JsonValueBooleanBuilder {
198        let mut inner = JsonValueBoolean::default();
199        inner.extra = Some(Uuid::new_v4().to_string());
200
201        JsonValueBooleanBuilder { inner }
202    }
203
204    pub fn value(&self) -> bool {
205        self.value
206    }
207}
208
209#[doc(hidden)]
210pub struct JsonValueBooleanBuilder {
211    inner: JsonValueBoolean,
212}
213
214#[deprecated]
215pub type RTDJsonValueBooleanBuilder = JsonValueBooleanBuilder;
216
217impl JsonValueBooleanBuilder {
218    pub fn build(&self) -> JsonValueBoolean {
219        self.inner.clone()
220    }
221
222    pub fn value(&mut self, value: bool) -> &mut Self {
223        self.inner.value = value;
224        self
225    }
226}
227
228impl AsRef<JsonValueBoolean> for JsonValueBoolean {
229    fn as_ref(&self) -> &JsonValueBoolean {
230        self
231    }
232}
233
234impl AsRef<JsonValueBoolean> for JsonValueBooleanBuilder {
235    fn as_ref(&self) -> &JsonValueBoolean {
236        &self.inner
237    }
238}
239
240/// Represents a null JSON value
241#[derive(Debug, Clone, Default, Serialize, Deserialize)]
242pub struct JsonValueNull {
243    #[doc(hidden)]
244    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
245    extra: Option<String>,
246    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
247    client_id: Option<i32>,
248}
249
250impl RObject for JsonValueNull {
251    #[doc(hidden)]
252    fn extra(&self) -> Option<&str> {
253        self.extra.as_deref()
254    }
255    #[doc(hidden)]
256    fn client_id(&self) -> Option<i32> {
257        self.client_id
258    }
259}
260
261impl TDJsonValue for JsonValueNull {}
262
263impl JsonValueNull {
264    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
265        Ok(serde_json::from_str(json.as_ref())?)
266    }
267    pub fn builder() -> JsonValueNullBuilder {
268        let mut inner = JsonValueNull::default();
269        inner.extra = Some(Uuid::new_v4().to_string());
270
271        JsonValueNullBuilder { inner }
272    }
273}
274
275#[doc(hidden)]
276pub struct JsonValueNullBuilder {
277    inner: JsonValueNull,
278}
279
280#[deprecated]
281pub type RTDJsonValueNullBuilder = JsonValueNullBuilder;
282
283impl JsonValueNullBuilder {
284    pub fn build(&self) -> JsonValueNull {
285        self.inner.clone()
286    }
287}
288
289impl AsRef<JsonValueNull> for JsonValueNull {
290    fn as_ref(&self) -> &JsonValueNull {
291        self
292    }
293}
294
295impl AsRef<JsonValueNull> for JsonValueNullBuilder {
296    fn as_ref(&self) -> &JsonValueNull {
297        &self.inner
298    }
299}
300
301/// Represents a numeric JSON value
302#[derive(Debug, Clone, Default, Serialize, Deserialize)]
303pub struct JsonValueNumber {
304    #[doc(hidden)]
305    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
306    extra: Option<String>,
307    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
308    client_id: Option<i32>,
309    /// The value
310
311    #[serde(default)]
312    value: f32,
313}
314
315impl RObject for JsonValueNumber {
316    #[doc(hidden)]
317    fn extra(&self) -> Option<&str> {
318        self.extra.as_deref()
319    }
320    #[doc(hidden)]
321    fn client_id(&self) -> Option<i32> {
322        self.client_id
323    }
324}
325
326impl TDJsonValue for JsonValueNumber {}
327
328impl JsonValueNumber {
329    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
330        Ok(serde_json::from_str(json.as_ref())?)
331    }
332    pub fn builder() -> JsonValueNumberBuilder {
333        let mut inner = JsonValueNumber::default();
334        inner.extra = Some(Uuid::new_v4().to_string());
335
336        JsonValueNumberBuilder { inner }
337    }
338
339    pub fn value(&self) -> f32 {
340        self.value
341    }
342}
343
344#[doc(hidden)]
345pub struct JsonValueNumberBuilder {
346    inner: JsonValueNumber,
347}
348
349#[deprecated]
350pub type RTDJsonValueNumberBuilder = JsonValueNumberBuilder;
351
352impl JsonValueNumberBuilder {
353    pub fn build(&self) -> JsonValueNumber {
354        self.inner.clone()
355    }
356
357    pub fn value(&mut self, value: f32) -> &mut Self {
358        self.inner.value = value;
359        self
360    }
361}
362
363impl AsRef<JsonValueNumber> for JsonValueNumber {
364    fn as_ref(&self) -> &JsonValueNumber {
365        self
366    }
367}
368
369impl AsRef<JsonValueNumber> for JsonValueNumberBuilder {
370    fn as_ref(&self) -> &JsonValueNumber {
371        &self.inner
372    }
373}
374
375/// Represents a JSON object
376#[derive(Debug, Clone, Default, Serialize, Deserialize)]
377pub struct JsonValueObject {
378    #[doc(hidden)]
379    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
380    extra: Option<String>,
381    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
382    client_id: Option<i32>,
383    /// The list of object members
384
385    #[serde(default)]
386    members: Vec<JsonObjectMember>,
387}
388
389impl RObject for JsonValueObject {
390    #[doc(hidden)]
391    fn extra(&self) -> Option<&str> {
392        self.extra.as_deref()
393    }
394    #[doc(hidden)]
395    fn client_id(&self) -> Option<i32> {
396        self.client_id
397    }
398}
399
400impl TDJsonValue for JsonValueObject {}
401
402impl JsonValueObject {
403    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
404        Ok(serde_json::from_str(json.as_ref())?)
405    }
406    pub fn builder() -> JsonValueObjectBuilder {
407        let mut inner = JsonValueObject::default();
408        inner.extra = Some(Uuid::new_v4().to_string());
409
410        JsonValueObjectBuilder { inner }
411    }
412
413    pub fn members(&self) -> &Vec<JsonObjectMember> {
414        &self.members
415    }
416}
417
418#[doc(hidden)]
419pub struct JsonValueObjectBuilder {
420    inner: JsonValueObject,
421}
422
423#[deprecated]
424pub type RTDJsonValueObjectBuilder = JsonValueObjectBuilder;
425
426impl JsonValueObjectBuilder {
427    pub fn build(&self) -> JsonValueObject {
428        self.inner.clone()
429    }
430
431    pub fn members(&mut self, members: Vec<JsonObjectMember>) -> &mut Self {
432        self.inner.members = members;
433        self
434    }
435}
436
437impl AsRef<JsonValueObject> for JsonValueObject {
438    fn as_ref(&self) -> &JsonValueObject {
439        self
440    }
441}
442
443impl AsRef<JsonValueObject> for JsonValueObjectBuilder {
444    fn as_ref(&self) -> &JsonValueObject {
445        &self.inner
446    }
447}
448
449/// Represents a string JSON value
450#[derive(Debug, Clone, Default, Serialize, Deserialize)]
451pub struct JsonValueString {
452    #[doc(hidden)]
453    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
454    extra: Option<String>,
455    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
456    client_id: Option<i32>,
457    /// The value
458
459    #[serde(default)]
460    value: String,
461}
462
463impl RObject for JsonValueString {
464    #[doc(hidden)]
465    fn extra(&self) -> Option<&str> {
466        self.extra.as_deref()
467    }
468    #[doc(hidden)]
469    fn client_id(&self) -> Option<i32> {
470        self.client_id
471    }
472}
473
474impl TDJsonValue for JsonValueString {}
475
476impl JsonValueString {
477    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
478        Ok(serde_json::from_str(json.as_ref())?)
479    }
480    pub fn builder() -> JsonValueStringBuilder {
481        let mut inner = JsonValueString::default();
482        inner.extra = Some(Uuid::new_v4().to_string());
483
484        JsonValueStringBuilder { inner }
485    }
486
487    pub fn value(&self) -> &String {
488        &self.value
489    }
490}
491
492#[doc(hidden)]
493pub struct JsonValueStringBuilder {
494    inner: JsonValueString,
495}
496
497#[deprecated]
498pub type RTDJsonValueStringBuilder = JsonValueStringBuilder;
499
500impl JsonValueStringBuilder {
501    pub fn build(&self) -> JsonValueString {
502        self.inner.clone()
503    }
504
505    pub fn value<T: AsRef<str>>(&mut self, value: T) -> &mut Self {
506        self.inner.value = value.as_ref().to_string();
507        self
508    }
509}
510
511impl AsRef<JsonValueString> for JsonValueString {
512    fn as_ref(&self) -> &JsonValueString {
513        self
514    }
515}
516
517impl AsRef<JsonValueString> for JsonValueStringBuilder {
518    fn as_ref(&self) -> &JsonValueString {
519        &self.inner
520    }
521}