nominal_api/conjure/objects/timeseries/logicalseries/api/
locator.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 Locator {
7 TimescaleDbLocator(super::TimescaleDbLocator),
8 InfluxLocator(super::Influx2Locator),
9 Influx1Locator(super::Influx1Locator),
10 NominalLocator(super::NominalLocator),
11 TimestreamLocator(super::TimestreamLocator),
12 VisualCrossingLocator(super::VisualCrossingLocator),
13 BigQueryLocator(super::BigQueryLocator),
14 ApiLocator(super::ApiLocator),
15 Unknown(Unknown),
17}
18impl ser::Serialize for Locator {
19 fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
20 where
21 S: ser::Serializer,
22 {
23 let mut map = s.serialize_map(Some(2))?;
24 match self {
25 Locator::TimescaleDbLocator(value) => {
26 map.serialize_entry(&"type", &"timescaleDbLocator")?;
27 map.serialize_entry(&"timescaleDbLocator", value)?;
28 }
29 Locator::InfluxLocator(value) => {
30 map.serialize_entry(&"type", &"influxLocator")?;
31 map.serialize_entry(&"influxLocator", value)?;
32 }
33 Locator::Influx1Locator(value) => {
34 map.serialize_entry(&"type", &"influx1Locator")?;
35 map.serialize_entry(&"influx1Locator", value)?;
36 }
37 Locator::NominalLocator(value) => {
38 map.serialize_entry(&"type", &"nominalLocator")?;
39 map.serialize_entry(&"nominalLocator", value)?;
40 }
41 Locator::TimestreamLocator(value) => {
42 map.serialize_entry(&"type", &"timestreamLocator")?;
43 map.serialize_entry(&"timestreamLocator", value)?;
44 }
45 Locator::VisualCrossingLocator(value) => {
46 map.serialize_entry(&"type", &"visualCrossingLocator")?;
47 map.serialize_entry(&"visualCrossingLocator", value)?;
48 }
49 Locator::BigQueryLocator(value) => {
50 map.serialize_entry(&"type", &"bigQueryLocator")?;
51 map.serialize_entry(&"bigQueryLocator", value)?;
52 }
53 Locator::ApiLocator(value) => {
54 map.serialize_entry(&"type", &"apiLocator")?;
55 map.serialize_entry(&"apiLocator", value)?;
56 }
57 Locator::Unknown(value) => {
58 map.serialize_entry(&"type", &value.type_)?;
59 map.serialize_entry(&value.type_, &value.value)?;
60 }
61 }
62 map.end()
63 }
64}
65impl<'de> de::Deserialize<'de> for Locator {
66 fn deserialize<D>(d: D) -> Result<Locator, D::Error>
67 where
68 D: de::Deserializer<'de>,
69 {
70 d.deserialize_map(Visitor_)
71 }
72}
73struct Visitor_;
74impl<'de> de::Visitor<'de> for Visitor_ {
75 type Value = Locator;
76 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
77 fmt.write_str("union Locator")
78 }
79 fn visit_map<A>(self, mut map: A) -> Result<Locator, A::Error>
80 where
81 A: de::MapAccess<'de>,
82 {
83 let v = match map.next_key::<UnionField_<Variant_>>()? {
84 Some(UnionField_::Type) => {
85 let variant = map.next_value()?;
86 let key = map.next_key()?;
87 match (variant, key) {
88 (
89 Variant_::TimescaleDbLocator,
90 Some(Variant_::TimescaleDbLocator),
91 ) => {
92 let value = map.next_value()?;
93 Locator::TimescaleDbLocator(value)
94 }
95 (Variant_::InfluxLocator, Some(Variant_::InfluxLocator)) => {
96 let value = map.next_value()?;
97 Locator::InfluxLocator(value)
98 }
99 (Variant_::Influx1Locator, Some(Variant_::Influx1Locator)) => {
100 let value = map.next_value()?;
101 Locator::Influx1Locator(value)
102 }
103 (Variant_::NominalLocator, Some(Variant_::NominalLocator)) => {
104 let value = map.next_value()?;
105 Locator::NominalLocator(value)
106 }
107 (Variant_::TimestreamLocator, Some(Variant_::TimestreamLocator)) => {
108 let value = map.next_value()?;
109 Locator::TimestreamLocator(value)
110 }
111 (
112 Variant_::VisualCrossingLocator,
113 Some(Variant_::VisualCrossingLocator),
114 ) => {
115 let value = map.next_value()?;
116 Locator::VisualCrossingLocator(value)
117 }
118 (Variant_::BigQueryLocator, Some(Variant_::BigQueryLocator)) => {
119 let value = map.next_value()?;
120 Locator::BigQueryLocator(value)
121 }
122 (Variant_::ApiLocator, Some(Variant_::ApiLocator)) => {
123 let value = map.next_value()?;
124 Locator::ApiLocator(value)
125 }
126 (Variant_::Unknown(type_), Some(Variant_::Unknown(b))) => {
127 if type_ == b {
128 let value = map.next_value()?;
129 Locator::Unknown(Unknown { type_, value })
130 } else {
131 return Err(
132 de::Error::invalid_value(de::Unexpected::Str(&type_), &&*b),
133 )
134 }
135 }
136 (variant, Some(key)) => {
137 return Err(
138 de::Error::invalid_value(
139 de::Unexpected::Str(key.as_str()),
140 &variant.as_str(),
141 ),
142 );
143 }
144 (variant, None) => {
145 return Err(de::Error::missing_field(variant.as_str()));
146 }
147 }
148 }
149 Some(UnionField_::Value(variant)) => {
150 let value = match &variant {
151 Variant_::TimescaleDbLocator => {
152 let value = map.next_value()?;
153 Locator::TimescaleDbLocator(value)
154 }
155 Variant_::InfluxLocator => {
156 let value = map.next_value()?;
157 Locator::InfluxLocator(value)
158 }
159 Variant_::Influx1Locator => {
160 let value = map.next_value()?;
161 Locator::Influx1Locator(value)
162 }
163 Variant_::NominalLocator => {
164 let value = map.next_value()?;
165 Locator::NominalLocator(value)
166 }
167 Variant_::TimestreamLocator => {
168 let value = map.next_value()?;
169 Locator::TimestreamLocator(value)
170 }
171 Variant_::VisualCrossingLocator => {
172 let value = map.next_value()?;
173 Locator::VisualCrossingLocator(value)
174 }
175 Variant_::BigQueryLocator => {
176 let value = map.next_value()?;
177 Locator::BigQueryLocator(value)
178 }
179 Variant_::ApiLocator => {
180 let value = map.next_value()?;
181 Locator::ApiLocator(value)
182 }
183 Variant_::Unknown(type_) => {
184 let value = map.next_value()?;
185 Locator::Unknown(Unknown {
186 type_: type_.clone(),
187 value,
188 })
189 }
190 };
191 if map.next_key::<UnionTypeField_>()?.is_none() {
192 return Err(de::Error::missing_field("type"));
193 }
194 let type_variant = map.next_value::<Variant_>()?;
195 if variant != type_variant {
196 return Err(
197 de::Error::invalid_value(
198 de::Unexpected::Str(type_variant.as_str()),
199 &variant.as_str(),
200 ),
201 );
202 }
203 value
204 }
205 None => return Err(de::Error::missing_field("type")),
206 };
207 if map.next_key::<UnionField_<Variant_>>()?.is_some() {
208 return Err(de::Error::invalid_length(3, &"type and value fields"));
209 }
210 Ok(v)
211 }
212}
213#[derive(PartialEq)]
214enum Variant_ {
215 TimescaleDbLocator,
216 InfluxLocator,
217 Influx1Locator,
218 NominalLocator,
219 TimestreamLocator,
220 VisualCrossingLocator,
221 BigQueryLocator,
222 ApiLocator,
223 Unknown(Box<str>),
224}
225impl Variant_ {
226 fn as_str(&self) -> &'static str {
227 match *self {
228 Variant_::TimescaleDbLocator => "timescaleDbLocator",
229 Variant_::InfluxLocator => "influxLocator",
230 Variant_::Influx1Locator => "influx1Locator",
231 Variant_::NominalLocator => "nominalLocator",
232 Variant_::TimestreamLocator => "timestreamLocator",
233 Variant_::VisualCrossingLocator => "visualCrossingLocator",
234 Variant_::BigQueryLocator => "bigQueryLocator",
235 Variant_::ApiLocator => "apiLocator",
236 Variant_::Unknown(_) => "unknown variant",
237 }
238 }
239}
240impl<'de> de::Deserialize<'de> for Variant_ {
241 fn deserialize<D>(d: D) -> Result<Variant_, D::Error>
242 where
243 D: de::Deserializer<'de>,
244 {
245 d.deserialize_str(VariantVisitor_)
246 }
247}
248struct VariantVisitor_;
249impl<'de> de::Visitor<'de> for VariantVisitor_ {
250 type Value = Variant_;
251 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
252 fmt.write_str("string")
253 }
254 fn visit_str<E>(self, value: &str) -> Result<Variant_, E>
255 where
256 E: de::Error,
257 {
258 let v = match value {
259 "timescaleDbLocator" => Variant_::TimescaleDbLocator,
260 "influxLocator" => Variant_::InfluxLocator,
261 "influx1Locator" => Variant_::Influx1Locator,
262 "nominalLocator" => Variant_::NominalLocator,
263 "timestreamLocator" => Variant_::TimestreamLocator,
264 "visualCrossingLocator" => Variant_::VisualCrossingLocator,
265 "bigQueryLocator" => Variant_::BigQueryLocator,
266 "apiLocator" => Variant_::ApiLocator,
267 value => Variant_::Unknown(value.to_string().into_boxed_str()),
268 };
269 Ok(v)
270 }
271}
272#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
274pub struct Unknown {
275 type_: Box<str>,
276 value: conjure_object::Any,
277}
278impl Unknown {
279 #[inline]
281 pub fn type_(&self) -> &str {
282 &self.type_
283 }
284}