nominal_api/conjure/objects/scout/chartdefinition/api/
table_column_numeric_aggregation.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, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub enum TableColumnNumericAggregation {
7 First(super::NoConfigAggregation),
8 Last(super::NoConfigAggregation),
9 Mean(super::NoConfigAggregation),
10 Min(super::NoConfigAggregation),
11 Max(super::NoConfigAggregation),
12 Unknown(Unknown),
14}
15impl ser::Serialize for TableColumnNumericAggregation {
16 fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
17 where
18 S: ser::Serializer,
19 {
20 let mut map = s.serialize_map(Some(2))?;
21 match self {
22 TableColumnNumericAggregation::First(value) => {
23 map.serialize_entry(&"type", &"first")?;
24 map.serialize_entry(&"first", value)?;
25 }
26 TableColumnNumericAggregation::Last(value) => {
27 map.serialize_entry(&"type", &"last")?;
28 map.serialize_entry(&"last", value)?;
29 }
30 TableColumnNumericAggregation::Mean(value) => {
31 map.serialize_entry(&"type", &"mean")?;
32 map.serialize_entry(&"mean", value)?;
33 }
34 TableColumnNumericAggregation::Min(value) => {
35 map.serialize_entry(&"type", &"min")?;
36 map.serialize_entry(&"min", value)?;
37 }
38 TableColumnNumericAggregation::Max(value) => {
39 map.serialize_entry(&"type", &"max")?;
40 map.serialize_entry(&"max", value)?;
41 }
42 TableColumnNumericAggregation::Unknown(value) => {
43 map.serialize_entry(&"type", &value.type_)?;
44 map.serialize_entry(&value.type_, &value.value)?;
45 }
46 }
47 map.end()
48 }
49}
50impl<'de> de::Deserialize<'de> for TableColumnNumericAggregation {
51 fn deserialize<D>(d: D) -> Result<TableColumnNumericAggregation, D::Error>
52 where
53 D: de::Deserializer<'de>,
54 {
55 d.deserialize_map(Visitor_)
56 }
57}
58struct Visitor_;
59impl<'de> de::Visitor<'de> for Visitor_ {
60 type Value = TableColumnNumericAggregation;
61 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
62 fmt.write_str("union TableColumnNumericAggregation")
63 }
64 fn visit_map<A>(self, mut map: A) -> Result<TableColumnNumericAggregation, A::Error>
65 where
66 A: de::MapAccess<'de>,
67 {
68 let v = match map.next_key::<UnionField_<Variant_>>()? {
69 Some(UnionField_::Type) => {
70 let variant = map.next_value()?;
71 let key = map.next_key()?;
72 match (variant, key) {
73 (Variant_::First, Some(Variant_::First)) => {
74 let value = map.next_value()?;
75 TableColumnNumericAggregation::First(value)
76 }
77 (Variant_::Last, Some(Variant_::Last)) => {
78 let value = map.next_value()?;
79 TableColumnNumericAggregation::Last(value)
80 }
81 (Variant_::Mean, Some(Variant_::Mean)) => {
82 let value = map.next_value()?;
83 TableColumnNumericAggregation::Mean(value)
84 }
85 (Variant_::Min, Some(Variant_::Min)) => {
86 let value = map.next_value()?;
87 TableColumnNumericAggregation::Min(value)
88 }
89 (Variant_::Max, Some(Variant_::Max)) => {
90 let value = map.next_value()?;
91 TableColumnNumericAggregation::Max(value)
92 }
93 (Variant_::Unknown(type_), Some(Variant_::Unknown(b))) => {
94 if type_ == b {
95 let value = map.next_value()?;
96 TableColumnNumericAggregation::Unknown(Unknown {
97 type_,
98 value,
99 })
100 } else {
101 return Err(
102 de::Error::invalid_value(de::Unexpected::Str(&type_), &&*b),
103 )
104 }
105 }
106 (variant, Some(key)) => {
107 return Err(
108 de::Error::invalid_value(
109 de::Unexpected::Str(key.as_str()),
110 &variant.as_str(),
111 ),
112 );
113 }
114 (variant, None) => {
115 return Err(de::Error::missing_field(variant.as_str()));
116 }
117 }
118 }
119 Some(UnionField_::Value(variant)) => {
120 let value = match &variant {
121 Variant_::First => {
122 let value = map.next_value()?;
123 TableColumnNumericAggregation::First(value)
124 }
125 Variant_::Last => {
126 let value = map.next_value()?;
127 TableColumnNumericAggregation::Last(value)
128 }
129 Variant_::Mean => {
130 let value = map.next_value()?;
131 TableColumnNumericAggregation::Mean(value)
132 }
133 Variant_::Min => {
134 let value = map.next_value()?;
135 TableColumnNumericAggregation::Min(value)
136 }
137 Variant_::Max => {
138 let value = map.next_value()?;
139 TableColumnNumericAggregation::Max(value)
140 }
141 Variant_::Unknown(type_) => {
142 let value = map.next_value()?;
143 TableColumnNumericAggregation::Unknown(Unknown {
144 type_: type_.clone(),
145 value,
146 })
147 }
148 };
149 if map.next_key::<UnionTypeField_>()?.is_none() {
150 return Err(de::Error::missing_field("type"));
151 }
152 let type_variant = map.next_value::<Variant_>()?;
153 if variant != type_variant {
154 return Err(
155 de::Error::invalid_value(
156 de::Unexpected::Str(type_variant.as_str()),
157 &variant.as_str(),
158 ),
159 );
160 }
161 value
162 }
163 None => return Err(de::Error::missing_field("type")),
164 };
165 if map.next_key::<UnionField_<Variant_>>()?.is_some() {
166 return Err(de::Error::invalid_length(3, &"type and value fields"));
167 }
168 Ok(v)
169 }
170}
171#[derive(PartialEq)]
172enum Variant_ {
173 First,
174 Last,
175 Mean,
176 Min,
177 Max,
178 Unknown(Box<str>),
179}
180impl Variant_ {
181 fn as_str(&self) -> &'static str {
182 match *self {
183 Variant_::First => "first",
184 Variant_::Last => "last",
185 Variant_::Mean => "mean",
186 Variant_::Min => "min",
187 Variant_::Max => "max",
188 Variant_::Unknown(_) => "unknown variant",
189 }
190 }
191}
192impl<'de> de::Deserialize<'de> for Variant_ {
193 fn deserialize<D>(d: D) -> Result<Variant_, D::Error>
194 where
195 D: de::Deserializer<'de>,
196 {
197 d.deserialize_str(VariantVisitor_)
198 }
199}
200struct VariantVisitor_;
201impl<'de> de::Visitor<'de> for VariantVisitor_ {
202 type Value = Variant_;
203 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
204 fmt.write_str("string")
205 }
206 fn visit_str<E>(self, value: &str) -> Result<Variant_, E>
207 where
208 E: de::Error,
209 {
210 let v = match value {
211 "first" => Variant_::First,
212 "last" => Variant_::Last,
213 "mean" => Variant_::Mean,
214 "min" => Variant_::Min,
215 "max" => Variant_::Max,
216 value => Variant_::Unknown(value.to_string().into_boxed_str()),
217 };
218 Ok(v)
219 }
220}
221#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
223pub struct Unknown {
224 type_: Box<str>,
225 value: conjure_object::Any,
226}
227impl Unknown {
228 #[inline]
230 pub fn type_(&self) -> &str {
231 &self.type_
232 }
233}