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