1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDJsonValue: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum JsonValue {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "getApplicationConfig")]
19 GetApplicationConfig(GetApplicationConfig),
20 #[serde(rename = "getJsonValue")]
22 GetJsonValue(GetJsonValue),
23 #[serde(rename = "jsonValueArray")]
25 Array(JsonValueArray),
26 #[serde(rename = "jsonValueBoolean")]
28 Boolean(JsonValueBoolean),
29 #[serde(rename = "jsonValueNull")]
31 Null(JsonValueNull),
32 #[serde(rename = "jsonValueNumber")]
34 Number(JsonValueNumber),
35 #[serde(rename = "jsonValueObject")]
37 Object(JsonValueObject),
38 #[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#[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 #[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#[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 #[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#[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#[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 #[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#[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 #[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#[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 #[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}