Skip to main content

nominal_api/conjure/objects/persistent/compute/api/
compute_node_append_response.rs

1use conjure_object::serde::{ser, de};
2use conjure_object::serde::ser::SerializeMap as SerializeMap_;
3use conjure_object::private::{UnionField_, UnionTypeField_};
4use std::fmt;
5#[derive(Debug, Clone, conjure_object::private::DeriveWith)]
6#[derive_with(PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub enum ComputeNodeAppendResponse {
8    /// Merging can be done via dropping any old ranges (possibly truncating the last one) and adding these new
9    /// ranges, possibly merging them if they overlap or are adjacent.
10    Range(Vec<super::super::super::super::scout::compute::api::Range>),
11    /// Merging can be done by keeping track of the applicable point present within the current window
12    EnumPoint(Option<super::super::super::super::scout::compute::api::EnumPoint>),
13    /// Merging can be done by keeping track of the applicable point present within the current window
14    NumericPoint(Option<super::super::super::super::scout::compute::api::NumericPoint>),
15    /// Merging can be done by keeping track of the applicable point present within the current window
16    SinglePoint(Option<super::super::super::super::scout::compute::api::SinglePoint>),
17    /// Merging can be done by keeping track of the applicable point present within the current window
18    LogPoint(Option<super::super::super::super::scout::compute::api::LogPoint>),
19    /// Merging can be done by keeping track of the applicable range present within the current window, possibly
20    /// merging ranges if they are overlap or are adjacent
21    RangeValue(Option<super::super::super::super::scout::compute::api::Range>),
22    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
23    Numeric(super::super::super::super::scout::compute::api::NumericPlot),
24    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
25    Enum(super::super::super::super::scout::compute::api::EnumPlot),
26    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
27    Log(super::super::super::super::scout::compute::api::LogPlot),
28    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
29    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
30    /// with the newer ones.
31    BucketedNumeric(
32        super::super::super::super::scout::compute::api::BucketedNumericPlot,
33    ),
34    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
35    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
36    /// with the newer ones.
37    BucketedEnum(super::super::super::super::scout::compute::api::BucketedEnumPlot),
38    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
39    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
40    /// with the newer ones.
41    Multivariate(
42        super::super::super::super::scout::compute::api::BucketedMultivariatePlot,
43    ),
44    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
45    ArrowNumeric(super::super::super::super::scout::compute::api::ArrowPlot),
46    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
47    ArrowEnum(super::super::super::super::scout::compute::api::ArrowPlot),
48    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
49    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
50    /// with the newer ones.
51    ArrowBucketedNumeric(super::super::super::super::scout::compute::api::ArrowPlot),
52    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
53    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
54    /// with the newer ones.
55    ArrowBucketedEnum(super::super::super::super::scout::compute::api::ArrowPlot),
56    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
57    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
58    /// with the newer ones.
59    ArrowBucketedMultivariate(
60        super::super::super::super::scout::compute::api::ArrowPlot,
61    ),
62    /// Merging can be done by dropping any old buckets and adding the new ones. Overlapping buckets are
63    /// guaranteed to align (same bucket end timestamp) and the older version of the bucket can be replaced
64    /// with the newer ones.
65    ArrowBucketedStruct(super::super::super::super::scout::compute::api::ArrowPlot),
66    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
67    ArrowStruct(super::super::super::super::scout::compute::api::ArrowPlot),
68    /// Merging can be done by dropping any old points and adding the new ones, accounting for overlaps
69    ArrowLog(super::super::super::super::scout::compute::api::ArrowPlot),
70    /// Appends can be done by doing an append individually for each contained `ComputeNodeAppendResponse`.
71    Grouped(super::GroupedComputeNodeAppendResponses),
72    /// An unknown variant.
73    Unknown(Unknown),
74}
75impl ser::Serialize for ComputeNodeAppendResponse {
76    fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
77    where
78        S: ser::Serializer,
79    {
80        let mut map = s.serialize_map(Some(2))?;
81        match self {
82            ComputeNodeAppendResponse::Range(value) => {
83                map.serialize_entry(&"type", &"range")?;
84                map.serialize_entry(&"range", value)?;
85            }
86            ComputeNodeAppendResponse::EnumPoint(value) => {
87                map.serialize_entry(&"type", &"enumPoint")?;
88                map.serialize_entry(&"enumPoint", value)?;
89            }
90            ComputeNodeAppendResponse::NumericPoint(value) => {
91                map.serialize_entry(&"type", &"numericPoint")?;
92                map.serialize_entry(&"numericPoint", value)?;
93            }
94            ComputeNodeAppendResponse::SinglePoint(value) => {
95                map.serialize_entry(&"type", &"singlePoint")?;
96                map.serialize_entry(&"singlePoint", value)?;
97            }
98            ComputeNodeAppendResponse::LogPoint(value) => {
99                map.serialize_entry(&"type", &"logPoint")?;
100                map.serialize_entry(&"logPoint", value)?;
101            }
102            ComputeNodeAppendResponse::RangeValue(value) => {
103                map.serialize_entry(&"type", &"rangeValue")?;
104                map.serialize_entry(&"rangeValue", value)?;
105            }
106            ComputeNodeAppendResponse::Numeric(value) => {
107                map.serialize_entry(&"type", &"numeric")?;
108                map.serialize_entry(&"numeric", value)?;
109            }
110            ComputeNodeAppendResponse::Enum(value) => {
111                map.serialize_entry(&"type", &"enum")?;
112                map.serialize_entry(&"enum", value)?;
113            }
114            ComputeNodeAppendResponse::Log(value) => {
115                map.serialize_entry(&"type", &"log")?;
116                map.serialize_entry(&"log", value)?;
117            }
118            ComputeNodeAppendResponse::BucketedNumeric(value) => {
119                map.serialize_entry(&"type", &"bucketedNumeric")?;
120                map.serialize_entry(&"bucketedNumeric", value)?;
121            }
122            ComputeNodeAppendResponse::BucketedEnum(value) => {
123                map.serialize_entry(&"type", &"bucketedEnum")?;
124                map.serialize_entry(&"bucketedEnum", value)?;
125            }
126            ComputeNodeAppendResponse::Multivariate(value) => {
127                map.serialize_entry(&"type", &"multivariate")?;
128                map.serialize_entry(&"multivariate", value)?;
129            }
130            ComputeNodeAppendResponse::ArrowNumeric(value) => {
131                map.serialize_entry(&"type", &"arrowNumeric")?;
132                map.serialize_entry(&"arrowNumeric", value)?;
133            }
134            ComputeNodeAppendResponse::ArrowEnum(value) => {
135                map.serialize_entry(&"type", &"arrowEnum")?;
136                map.serialize_entry(&"arrowEnum", value)?;
137            }
138            ComputeNodeAppendResponse::ArrowBucketedNumeric(value) => {
139                map.serialize_entry(&"type", &"arrowBucketedNumeric")?;
140                map.serialize_entry(&"arrowBucketedNumeric", value)?;
141            }
142            ComputeNodeAppendResponse::ArrowBucketedEnum(value) => {
143                map.serialize_entry(&"type", &"arrowBucketedEnum")?;
144                map.serialize_entry(&"arrowBucketedEnum", value)?;
145            }
146            ComputeNodeAppendResponse::ArrowBucketedMultivariate(value) => {
147                map.serialize_entry(&"type", &"arrowBucketedMultivariate")?;
148                map.serialize_entry(&"arrowBucketedMultivariate", value)?;
149            }
150            ComputeNodeAppendResponse::ArrowBucketedStruct(value) => {
151                map.serialize_entry(&"type", &"arrowBucketedStruct")?;
152                map.serialize_entry(&"arrowBucketedStruct", value)?;
153            }
154            ComputeNodeAppendResponse::ArrowStruct(value) => {
155                map.serialize_entry(&"type", &"arrowStruct")?;
156                map.serialize_entry(&"arrowStruct", value)?;
157            }
158            ComputeNodeAppendResponse::ArrowLog(value) => {
159                map.serialize_entry(&"type", &"arrowLog")?;
160                map.serialize_entry(&"arrowLog", value)?;
161            }
162            ComputeNodeAppendResponse::Grouped(value) => {
163                map.serialize_entry(&"type", &"grouped")?;
164                map.serialize_entry(&"grouped", value)?;
165            }
166            ComputeNodeAppendResponse::Unknown(value) => {
167                map.serialize_entry(&"type", &value.type_)?;
168                map.serialize_entry(&value.type_, &value.value)?;
169            }
170        }
171        map.end()
172    }
173}
174impl<'de> de::Deserialize<'de> for ComputeNodeAppendResponse {
175    fn deserialize<D>(d: D) -> Result<ComputeNodeAppendResponse, D::Error>
176    where
177        D: de::Deserializer<'de>,
178    {
179        d.deserialize_map(Visitor_)
180    }
181}
182struct Visitor_;
183impl<'de> de::Visitor<'de> for Visitor_ {
184    type Value = ComputeNodeAppendResponse;
185    fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
186        fmt.write_str("union ComputeNodeAppendResponse")
187    }
188    fn visit_map<A>(self, mut map: A) -> Result<ComputeNodeAppendResponse, A::Error>
189    where
190        A: de::MapAccess<'de>,
191    {
192        let v = match map.next_key::<UnionField_<Variant_>>()? {
193            Some(UnionField_::Type) => {
194                let variant = map.next_value()?;
195                let key = map.next_key()?;
196                match (variant, key) {
197                    (Variant_::Range, Some(Variant_::Range)) => {
198                        let value = map.next_value()?;
199                        ComputeNodeAppendResponse::Range(value)
200                    }
201                    (Variant_::EnumPoint, Some(Variant_::EnumPoint)) => {
202                        let value = map.next_value()?;
203                        ComputeNodeAppendResponse::EnumPoint(value)
204                    }
205                    (Variant_::NumericPoint, Some(Variant_::NumericPoint)) => {
206                        let value = map.next_value()?;
207                        ComputeNodeAppendResponse::NumericPoint(value)
208                    }
209                    (Variant_::SinglePoint, Some(Variant_::SinglePoint)) => {
210                        let value = map.next_value()?;
211                        ComputeNodeAppendResponse::SinglePoint(value)
212                    }
213                    (Variant_::LogPoint, Some(Variant_::LogPoint)) => {
214                        let value = map.next_value()?;
215                        ComputeNodeAppendResponse::LogPoint(value)
216                    }
217                    (Variant_::RangeValue, Some(Variant_::RangeValue)) => {
218                        let value = map.next_value()?;
219                        ComputeNodeAppendResponse::RangeValue(value)
220                    }
221                    (Variant_::Numeric, Some(Variant_::Numeric)) => {
222                        let value = map.next_value()?;
223                        ComputeNodeAppendResponse::Numeric(value)
224                    }
225                    (Variant_::Enum, Some(Variant_::Enum)) => {
226                        let value = map.next_value()?;
227                        ComputeNodeAppendResponse::Enum(value)
228                    }
229                    (Variant_::Log, Some(Variant_::Log)) => {
230                        let value = map.next_value()?;
231                        ComputeNodeAppendResponse::Log(value)
232                    }
233                    (Variant_::BucketedNumeric, Some(Variant_::BucketedNumeric)) => {
234                        let value = map.next_value()?;
235                        ComputeNodeAppendResponse::BucketedNumeric(value)
236                    }
237                    (Variant_::BucketedEnum, Some(Variant_::BucketedEnum)) => {
238                        let value = map.next_value()?;
239                        ComputeNodeAppendResponse::BucketedEnum(value)
240                    }
241                    (Variant_::Multivariate, Some(Variant_::Multivariate)) => {
242                        let value = map.next_value()?;
243                        ComputeNodeAppendResponse::Multivariate(value)
244                    }
245                    (Variant_::ArrowNumeric, Some(Variant_::ArrowNumeric)) => {
246                        let value = map.next_value()?;
247                        ComputeNodeAppendResponse::ArrowNumeric(value)
248                    }
249                    (Variant_::ArrowEnum, Some(Variant_::ArrowEnum)) => {
250                        let value = map.next_value()?;
251                        ComputeNodeAppendResponse::ArrowEnum(value)
252                    }
253                    (
254                        Variant_::ArrowBucketedNumeric,
255                        Some(Variant_::ArrowBucketedNumeric),
256                    ) => {
257                        let value = map.next_value()?;
258                        ComputeNodeAppendResponse::ArrowBucketedNumeric(value)
259                    }
260                    (Variant_::ArrowBucketedEnum, Some(Variant_::ArrowBucketedEnum)) => {
261                        let value = map.next_value()?;
262                        ComputeNodeAppendResponse::ArrowBucketedEnum(value)
263                    }
264                    (
265                        Variant_::ArrowBucketedMultivariate,
266                        Some(Variant_::ArrowBucketedMultivariate),
267                    ) => {
268                        let value = map.next_value()?;
269                        ComputeNodeAppendResponse::ArrowBucketedMultivariate(value)
270                    }
271                    (
272                        Variant_::ArrowBucketedStruct,
273                        Some(Variant_::ArrowBucketedStruct),
274                    ) => {
275                        let value = map.next_value()?;
276                        ComputeNodeAppendResponse::ArrowBucketedStruct(value)
277                    }
278                    (Variant_::ArrowStruct, Some(Variant_::ArrowStruct)) => {
279                        let value = map.next_value()?;
280                        ComputeNodeAppendResponse::ArrowStruct(value)
281                    }
282                    (Variant_::ArrowLog, Some(Variant_::ArrowLog)) => {
283                        let value = map.next_value()?;
284                        ComputeNodeAppendResponse::ArrowLog(value)
285                    }
286                    (Variant_::Grouped, Some(Variant_::Grouped)) => {
287                        let value = map.next_value()?;
288                        ComputeNodeAppendResponse::Grouped(value)
289                    }
290                    (Variant_::Unknown(type_), Some(Variant_::Unknown(b))) => {
291                        if type_ == b {
292                            let value = map.next_value()?;
293                            ComputeNodeAppendResponse::Unknown(Unknown { type_, value })
294                        } else {
295                            return Err(
296                                de::Error::invalid_value(de::Unexpected::Str(&type_), &&*b),
297                            )
298                        }
299                    }
300                    (variant, Some(key)) => {
301                        return Err(
302                            de::Error::invalid_value(
303                                de::Unexpected::Str(key.as_str()),
304                                &variant.as_str(),
305                            ),
306                        );
307                    }
308                    (variant, None) => {
309                        return Err(de::Error::missing_field(variant.as_str()));
310                    }
311                }
312            }
313            Some(UnionField_::Value(variant)) => {
314                let value = match &variant {
315                    Variant_::Range => {
316                        let value = map.next_value()?;
317                        ComputeNodeAppendResponse::Range(value)
318                    }
319                    Variant_::EnumPoint => {
320                        let value = map.next_value()?;
321                        ComputeNodeAppendResponse::EnumPoint(value)
322                    }
323                    Variant_::NumericPoint => {
324                        let value = map.next_value()?;
325                        ComputeNodeAppendResponse::NumericPoint(value)
326                    }
327                    Variant_::SinglePoint => {
328                        let value = map.next_value()?;
329                        ComputeNodeAppendResponse::SinglePoint(value)
330                    }
331                    Variant_::LogPoint => {
332                        let value = map.next_value()?;
333                        ComputeNodeAppendResponse::LogPoint(value)
334                    }
335                    Variant_::RangeValue => {
336                        let value = map.next_value()?;
337                        ComputeNodeAppendResponse::RangeValue(value)
338                    }
339                    Variant_::Numeric => {
340                        let value = map.next_value()?;
341                        ComputeNodeAppendResponse::Numeric(value)
342                    }
343                    Variant_::Enum => {
344                        let value = map.next_value()?;
345                        ComputeNodeAppendResponse::Enum(value)
346                    }
347                    Variant_::Log => {
348                        let value = map.next_value()?;
349                        ComputeNodeAppendResponse::Log(value)
350                    }
351                    Variant_::BucketedNumeric => {
352                        let value = map.next_value()?;
353                        ComputeNodeAppendResponse::BucketedNumeric(value)
354                    }
355                    Variant_::BucketedEnum => {
356                        let value = map.next_value()?;
357                        ComputeNodeAppendResponse::BucketedEnum(value)
358                    }
359                    Variant_::Multivariate => {
360                        let value = map.next_value()?;
361                        ComputeNodeAppendResponse::Multivariate(value)
362                    }
363                    Variant_::ArrowNumeric => {
364                        let value = map.next_value()?;
365                        ComputeNodeAppendResponse::ArrowNumeric(value)
366                    }
367                    Variant_::ArrowEnum => {
368                        let value = map.next_value()?;
369                        ComputeNodeAppendResponse::ArrowEnum(value)
370                    }
371                    Variant_::ArrowBucketedNumeric => {
372                        let value = map.next_value()?;
373                        ComputeNodeAppendResponse::ArrowBucketedNumeric(value)
374                    }
375                    Variant_::ArrowBucketedEnum => {
376                        let value = map.next_value()?;
377                        ComputeNodeAppendResponse::ArrowBucketedEnum(value)
378                    }
379                    Variant_::ArrowBucketedMultivariate => {
380                        let value = map.next_value()?;
381                        ComputeNodeAppendResponse::ArrowBucketedMultivariate(value)
382                    }
383                    Variant_::ArrowBucketedStruct => {
384                        let value = map.next_value()?;
385                        ComputeNodeAppendResponse::ArrowBucketedStruct(value)
386                    }
387                    Variant_::ArrowStruct => {
388                        let value = map.next_value()?;
389                        ComputeNodeAppendResponse::ArrowStruct(value)
390                    }
391                    Variant_::ArrowLog => {
392                        let value = map.next_value()?;
393                        ComputeNodeAppendResponse::ArrowLog(value)
394                    }
395                    Variant_::Grouped => {
396                        let value = map.next_value()?;
397                        ComputeNodeAppendResponse::Grouped(value)
398                    }
399                    Variant_::Unknown(type_) => {
400                        let value = map.next_value()?;
401                        ComputeNodeAppendResponse::Unknown(Unknown {
402                            type_: type_.clone(),
403                            value,
404                        })
405                    }
406                };
407                if map.next_key::<UnionTypeField_>()?.is_none() {
408                    return Err(de::Error::missing_field("type"));
409                }
410                let type_variant = map.next_value::<Variant_>()?;
411                if variant != type_variant {
412                    return Err(
413                        de::Error::invalid_value(
414                            de::Unexpected::Str(type_variant.as_str()),
415                            &variant.as_str(),
416                        ),
417                    );
418                }
419                value
420            }
421            None => return Err(de::Error::missing_field("type")),
422        };
423        if map.next_key::<UnionField_<Variant_>>()?.is_some() {
424            return Err(de::Error::invalid_length(3, &"type and value fields"));
425        }
426        Ok(v)
427    }
428}
429#[derive(PartialEq)]
430enum Variant_ {
431    Range,
432    EnumPoint,
433    NumericPoint,
434    SinglePoint,
435    LogPoint,
436    RangeValue,
437    Numeric,
438    Enum,
439    Log,
440    BucketedNumeric,
441    BucketedEnum,
442    Multivariate,
443    ArrowNumeric,
444    ArrowEnum,
445    ArrowBucketedNumeric,
446    ArrowBucketedEnum,
447    ArrowBucketedMultivariate,
448    ArrowBucketedStruct,
449    ArrowStruct,
450    ArrowLog,
451    Grouped,
452    Unknown(Box<str>),
453}
454impl Variant_ {
455    fn as_str(&self) -> &'static str {
456        match *self {
457            Variant_::Range => "range",
458            Variant_::EnumPoint => "enumPoint",
459            Variant_::NumericPoint => "numericPoint",
460            Variant_::SinglePoint => "singlePoint",
461            Variant_::LogPoint => "logPoint",
462            Variant_::RangeValue => "rangeValue",
463            Variant_::Numeric => "numeric",
464            Variant_::Enum => "enum",
465            Variant_::Log => "log",
466            Variant_::BucketedNumeric => "bucketedNumeric",
467            Variant_::BucketedEnum => "bucketedEnum",
468            Variant_::Multivariate => "multivariate",
469            Variant_::ArrowNumeric => "arrowNumeric",
470            Variant_::ArrowEnum => "arrowEnum",
471            Variant_::ArrowBucketedNumeric => "arrowBucketedNumeric",
472            Variant_::ArrowBucketedEnum => "arrowBucketedEnum",
473            Variant_::ArrowBucketedMultivariate => "arrowBucketedMultivariate",
474            Variant_::ArrowBucketedStruct => "arrowBucketedStruct",
475            Variant_::ArrowStruct => "arrowStruct",
476            Variant_::ArrowLog => "arrowLog",
477            Variant_::Grouped => "grouped",
478            Variant_::Unknown(_) => "unknown variant",
479        }
480    }
481}
482impl<'de> de::Deserialize<'de> for Variant_ {
483    fn deserialize<D>(d: D) -> Result<Variant_, D::Error>
484    where
485        D: de::Deserializer<'de>,
486    {
487        d.deserialize_str(VariantVisitor_)
488    }
489}
490struct VariantVisitor_;
491impl<'de> de::Visitor<'de> for VariantVisitor_ {
492    type Value = Variant_;
493    fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
494        fmt.write_str("string")
495    }
496    fn visit_str<E>(self, value: &str) -> Result<Variant_, E>
497    where
498        E: de::Error,
499    {
500        let v = match value {
501            "range" => Variant_::Range,
502            "enumPoint" => Variant_::EnumPoint,
503            "numericPoint" => Variant_::NumericPoint,
504            "singlePoint" => Variant_::SinglePoint,
505            "logPoint" => Variant_::LogPoint,
506            "rangeValue" => Variant_::RangeValue,
507            "numeric" => Variant_::Numeric,
508            "enum" => Variant_::Enum,
509            "log" => Variant_::Log,
510            "bucketedNumeric" => Variant_::BucketedNumeric,
511            "bucketedEnum" => Variant_::BucketedEnum,
512            "multivariate" => Variant_::Multivariate,
513            "arrowNumeric" => Variant_::ArrowNumeric,
514            "arrowEnum" => Variant_::ArrowEnum,
515            "arrowBucketedNumeric" => Variant_::ArrowBucketedNumeric,
516            "arrowBucketedEnum" => Variant_::ArrowBucketedEnum,
517            "arrowBucketedMultivariate" => Variant_::ArrowBucketedMultivariate,
518            "arrowBucketedStruct" => Variant_::ArrowBucketedStruct,
519            "arrowStruct" => Variant_::ArrowStruct,
520            "arrowLog" => Variant_::ArrowLog,
521            "grouped" => Variant_::Grouped,
522            value => Variant_::Unknown(value.to_string().into_boxed_str()),
523        };
524        Ok(v)
525    }
526}
527///An unknown variant of the ComputeNodeAppendResponse union.
528#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
529pub struct Unknown {
530    type_: Box<str>,
531    value: conjure_object::Any,
532}
533impl Unknown {
534    /// Returns the unknown variant's type name.
535    #[inline]
536    pub fn type_(&self) -> &str {
537        &self.type_
538    }
539}