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