nominal_api/conjure/objects/scout/compute/resolved/api/
enum_series_node.rs1use 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 EnumSeriesNode {
8 Literal(super::LiteralEnumSeriesNode),
9 Raw(super::RawEnumSeriesNode),
10 Resample(super::EnumResampleSeriesNode),
11 TimeRangeFilter(super::EnumTimeRangeFilterSeriesNode),
12 Union(super::EnumUnionSeriesNode),
13 Aggregate(super::AggregateEnumSeriesNode),
14 FilterTransformation(super::EnumFilterTransformationSeriesNode),
15 ValueMap(super::ValueMapSeriesNode),
16 ArraySelect(super::SelectIndexFromEnumArraySeriesNode),
17 ExtractFromStruct(super::ExtractEnumFromStructSeriesNode),
18 GenericTransform(Box<super::GenericTransformNode>),
19 ScalarUdf(super::ScalarUdfSeriesNode),
20 Unknown(Unknown),
22}
23impl ser::Serialize for EnumSeriesNode {
24 fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
25 where
26 S: ser::Serializer,
27 {
28 let mut map = s.serialize_map(Some(2))?;
29 match self {
30 EnumSeriesNode::Literal(value) => {
31 map.serialize_entry(&"type", &"literal")?;
32 map.serialize_entry(&"literal", value)?;
33 }
34 EnumSeriesNode::Raw(value) => {
35 map.serialize_entry(&"type", &"raw")?;
36 map.serialize_entry(&"raw", value)?;
37 }
38 EnumSeriesNode::Resample(value) => {
39 map.serialize_entry(&"type", &"resample")?;
40 map.serialize_entry(&"resample", value)?;
41 }
42 EnumSeriesNode::TimeRangeFilter(value) => {
43 map.serialize_entry(&"type", &"timeRangeFilter")?;
44 map.serialize_entry(&"timeRangeFilter", value)?;
45 }
46 EnumSeriesNode::Union(value) => {
47 map.serialize_entry(&"type", &"union")?;
48 map.serialize_entry(&"union", value)?;
49 }
50 EnumSeriesNode::Aggregate(value) => {
51 map.serialize_entry(&"type", &"aggregate")?;
52 map.serialize_entry(&"aggregate", value)?;
53 }
54 EnumSeriesNode::FilterTransformation(value) => {
55 map.serialize_entry(&"type", &"filterTransformation")?;
56 map.serialize_entry(&"filterTransformation", value)?;
57 }
58 EnumSeriesNode::ValueMap(value) => {
59 map.serialize_entry(&"type", &"valueMap")?;
60 map.serialize_entry(&"valueMap", value)?;
61 }
62 EnumSeriesNode::ArraySelect(value) => {
63 map.serialize_entry(&"type", &"arraySelect")?;
64 map.serialize_entry(&"arraySelect", value)?;
65 }
66 EnumSeriesNode::ExtractFromStruct(value) => {
67 map.serialize_entry(&"type", &"extractFromStruct")?;
68 map.serialize_entry(&"extractFromStruct", value)?;
69 }
70 EnumSeriesNode::GenericTransform(value) => {
71 map.serialize_entry(&"type", &"genericTransform")?;
72 map.serialize_entry(&"genericTransform", value)?;
73 }
74 EnumSeriesNode::ScalarUdf(value) => {
75 map.serialize_entry(&"type", &"scalarUdf")?;
76 map.serialize_entry(&"scalarUdf", value)?;
77 }
78 EnumSeriesNode::Unknown(value) => {
79 map.serialize_entry(&"type", &value.type_)?;
80 map.serialize_entry(&value.type_, &value.value)?;
81 }
82 }
83 map.end()
84 }
85}
86impl<'de> de::Deserialize<'de> for EnumSeriesNode {
87 fn deserialize<D>(d: D) -> Result<EnumSeriesNode, D::Error>
88 where
89 D: de::Deserializer<'de>,
90 {
91 d.deserialize_map(Visitor_)
92 }
93}
94struct Visitor_;
95impl<'de> de::Visitor<'de> for Visitor_ {
96 type Value = EnumSeriesNode;
97 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
98 fmt.write_str("union EnumSeriesNode")
99 }
100 fn visit_map<A>(self, mut map: A) -> Result<EnumSeriesNode, A::Error>
101 where
102 A: de::MapAccess<'de>,
103 {
104 let v = match map.next_key::<UnionField_<Variant_>>()? {
105 Some(UnionField_::Type) => {
106 let variant = map.next_value()?;
107 let key = map.next_key()?;
108 match (variant, key) {
109 (Variant_::Literal, Some(Variant_::Literal)) => {
110 let value = map.next_value()?;
111 EnumSeriesNode::Literal(value)
112 }
113 (Variant_::Raw, Some(Variant_::Raw)) => {
114 let value = map.next_value()?;
115 EnumSeriesNode::Raw(value)
116 }
117 (Variant_::Resample, Some(Variant_::Resample)) => {
118 let value = map.next_value()?;
119 EnumSeriesNode::Resample(value)
120 }
121 (Variant_::TimeRangeFilter, Some(Variant_::TimeRangeFilter)) => {
122 let value = map.next_value()?;
123 EnumSeriesNode::TimeRangeFilter(value)
124 }
125 (Variant_::Union, Some(Variant_::Union)) => {
126 let value = map.next_value()?;
127 EnumSeriesNode::Union(value)
128 }
129 (Variant_::Aggregate, Some(Variant_::Aggregate)) => {
130 let value = map.next_value()?;
131 EnumSeriesNode::Aggregate(value)
132 }
133 (
134 Variant_::FilterTransformation,
135 Some(Variant_::FilterTransformation),
136 ) => {
137 let value = map.next_value()?;
138 EnumSeriesNode::FilterTransformation(value)
139 }
140 (Variant_::ValueMap, Some(Variant_::ValueMap)) => {
141 let value = map.next_value()?;
142 EnumSeriesNode::ValueMap(value)
143 }
144 (Variant_::ArraySelect, Some(Variant_::ArraySelect)) => {
145 let value = map.next_value()?;
146 EnumSeriesNode::ArraySelect(value)
147 }
148 (Variant_::ExtractFromStruct, Some(Variant_::ExtractFromStruct)) => {
149 let value = map.next_value()?;
150 EnumSeriesNode::ExtractFromStruct(value)
151 }
152 (Variant_::GenericTransform, Some(Variant_::GenericTransform)) => {
153 let value = map.next_value()?;
154 EnumSeriesNode::GenericTransform(value)
155 }
156 (Variant_::ScalarUdf, Some(Variant_::ScalarUdf)) => {
157 let value = map.next_value()?;
158 EnumSeriesNode::ScalarUdf(value)
159 }
160 (Variant_::Unknown(type_), Some(Variant_::Unknown(b))) => {
161 if type_ == b {
162 let value = map.next_value()?;
163 EnumSeriesNode::Unknown(Unknown { type_, value })
164 } else {
165 return Err(
166 de::Error::invalid_value(de::Unexpected::Str(&type_), &&*b),
167 )
168 }
169 }
170 (variant, Some(key)) => {
171 return Err(
172 de::Error::invalid_value(
173 de::Unexpected::Str(key.as_str()),
174 &variant.as_str(),
175 ),
176 );
177 }
178 (variant, None) => {
179 return Err(de::Error::missing_field(variant.as_str()));
180 }
181 }
182 }
183 Some(UnionField_::Value(variant)) => {
184 let value = match &variant {
185 Variant_::Literal => {
186 let value = map.next_value()?;
187 EnumSeriesNode::Literal(value)
188 }
189 Variant_::Raw => {
190 let value = map.next_value()?;
191 EnumSeriesNode::Raw(value)
192 }
193 Variant_::Resample => {
194 let value = map.next_value()?;
195 EnumSeriesNode::Resample(value)
196 }
197 Variant_::TimeRangeFilter => {
198 let value = map.next_value()?;
199 EnumSeriesNode::TimeRangeFilter(value)
200 }
201 Variant_::Union => {
202 let value = map.next_value()?;
203 EnumSeriesNode::Union(value)
204 }
205 Variant_::Aggregate => {
206 let value = map.next_value()?;
207 EnumSeriesNode::Aggregate(value)
208 }
209 Variant_::FilterTransformation => {
210 let value = map.next_value()?;
211 EnumSeriesNode::FilterTransformation(value)
212 }
213 Variant_::ValueMap => {
214 let value = map.next_value()?;
215 EnumSeriesNode::ValueMap(value)
216 }
217 Variant_::ArraySelect => {
218 let value = map.next_value()?;
219 EnumSeriesNode::ArraySelect(value)
220 }
221 Variant_::ExtractFromStruct => {
222 let value = map.next_value()?;
223 EnumSeriesNode::ExtractFromStruct(value)
224 }
225 Variant_::GenericTransform => {
226 let value = map.next_value()?;
227 EnumSeriesNode::GenericTransform(value)
228 }
229 Variant_::ScalarUdf => {
230 let value = map.next_value()?;
231 EnumSeriesNode::ScalarUdf(value)
232 }
233 Variant_::Unknown(type_) => {
234 let value = map.next_value()?;
235 EnumSeriesNode::Unknown(Unknown {
236 type_: type_.clone(),
237 value,
238 })
239 }
240 };
241 if map.next_key::<UnionTypeField_>()?.is_none() {
242 return Err(de::Error::missing_field("type"));
243 }
244 let type_variant = map.next_value::<Variant_>()?;
245 if variant != type_variant {
246 return Err(
247 de::Error::invalid_value(
248 de::Unexpected::Str(type_variant.as_str()),
249 &variant.as_str(),
250 ),
251 );
252 }
253 value
254 }
255 None => return Err(de::Error::missing_field("type")),
256 };
257 if map.next_key::<UnionField_<Variant_>>()?.is_some() {
258 return Err(de::Error::invalid_length(3, &"type and value fields"));
259 }
260 Ok(v)
261 }
262}
263#[derive(PartialEq)]
264enum Variant_ {
265 Literal,
266 Raw,
267 Resample,
268 TimeRangeFilter,
269 Union,
270 Aggregate,
271 FilterTransformation,
272 ValueMap,
273 ArraySelect,
274 ExtractFromStruct,
275 GenericTransform,
276 ScalarUdf,
277 Unknown(Box<str>),
278}
279impl Variant_ {
280 fn as_str(&self) -> &'static str {
281 match *self {
282 Variant_::Literal => "literal",
283 Variant_::Raw => "raw",
284 Variant_::Resample => "resample",
285 Variant_::TimeRangeFilter => "timeRangeFilter",
286 Variant_::Union => "union",
287 Variant_::Aggregate => "aggregate",
288 Variant_::FilterTransformation => "filterTransformation",
289 Variant_::ValueMap => "valueMap",
290 Variant_::ArraySelect => "arraySelect",
291 Variant_::ExtractFromStruct => "extractFromStruct",
292 Variant_::GenericTransform => "genericTransform",
293 Variant_::ScalarUdf => "scalarUdf",
294 Variant_::Unknown(_) => "unknown variant",
295 }
296 }
297}
298impl<'de> de::Deserialize<'de> for Variant_ {
299 fn deserialize<D>(d: D) -> Result<Variant_, D::Error>
300 where
301 D: de::Deserializer<'de>,
302 {
303 d.deserialize_str(VariantVisitor_)
304 }
305}
306struct VariantVisitor_;
307impl<'de> de::Visitor<'de> for VariantVisitor_ {
308 type Value = Variant_;
309 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
310 fmt.write_str("string")
311 }
312 fn visit_str<E>(self, value: &str) -> Result<Variant_, E>
313 where
314 E: de::Error,
315 {
316 let v = match value {
317 "literal" => Variant_::Literal,
318 "raw" => Variant_::Raw,
319 "resample" => Variant_::Resample,
320 "timeRangeFilter" => Variant_::TimeRangeFilter,
321 "union" => Variant_::Union,
322 "aggregate" => Variant_::Aggregate,
323 "filterTransformation" => Variant_::FilterTransformation,
324 "valueMap" => Variant_::ValueMap,
325 "arraySelect" => Variant_::ArraySelect,
326 "extractFromStruct" => Variant_::ExtractFromStruct,
327 "genericTransform" => Variant_::GenericTransform,
328 "scalarUdf" => Variant_::ScalarUdf,
329 value => Variant_::Unknown(value.to_string().into_boxed_str()),
330 };
331 Ok(v)
332 }
333}
334#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
336pub struct Unknown {
337 type_: Box<str>,
338 value: conjure_object::Any,
339}
340impl Unknown {
341 #[inline]
343 pub fn type_(&self) -> &str {
344 &self.type_
345 }
346}