nominal_api/conjure/objects/scout/compute/api/
output_range_start.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 OutputRangeStart {
7 FirstPointMatchingCondition(super::FirstPointMatchingCondition),
9 AfterPersistenceWindow(super::AfterPersistenceWindow),
12 Unknown(Unknown),
14}
15impl ser::Serialize for OutputRangeStart {
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 OutputRangeStart::FirstPointMatchingCondition(value) => {
23 map.serialize_entry(&"type", &"firstPointMatchingCondition")?;
24 map.serialize_entry(&"firstPointMatchingCondition", value)?;
25 }
26 OutputRangeStart::AfterPersistenceWindow(value) => {
27 map.serialize_entry(&"type", &"afterPersistenceWindow")?;
28 map.serialize_entry(&"afterPersistenceWindow", value)?;
29 }
30 OutputRangeStart::Unknown(value) => {
31 map.serialize_entry(&"type", &value.type_)?;
32 map.serialize_entry(&value.type_, &value.value)?;
33 }
34 }
35 map.end()
36 }
37}
38impl<'de> de::Deserialize<'de> for OutputRangeStart {
39 fn deserialize<D>(d: D) -> Result<OutputRangeStart, D::Error>
40 where
41 D: de::Deserializer<'de>,
42 {
43 d.deserialize_map(Visitor_)
44 }
45}
46struct Visitor_;
47impl<'de> de::Visitor<'de> for Visitor_ {
48 type Value = OutputRangeStart;
49 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
50 fmt.write_str("union OutputRangeStart")
51 }
52 fn visit_map<A>(self, mut map: A) -> Result<OutputRangeStart, A::Error>
53 where
54 A: de::MapAccess<'de>,
55 {
56 let v = match map.next_key::<UnionField_<Variant_>>()? {
57 Some(UnionField_::Type) => {
58 let variant = map.next_value()?;
59 let key = map.next_key()?;
60 match (variant, key) {
61 (
62 Variant_::FirstPointMatchingCondition,
63 Some(Variant_::FirstPointMatchingCondition),
64 ) => {
65 let value = map.next_value()?;
66 OutputRangeStart::FirstPointMatchingCondition(value)
67 }
68 (
69 Variant_::AfterPersistenceWindow,
70 Some(Variant_::AfterPersistenceWindow),
71 ) => {
72 let value = map.next_value()?;
73 OutputRangeStart::AfterPersistenceWindow(value)
74 }
75 (Variant_::Unknown(type_), Some(Variant_::Unknown(b))) => {
76 if type_ == b {
77 let value = map.next_value()?;
78 OutputRangeStart::Unknown(Unknown { type_, value })
79 } else {
80 return Err(
81 de::Error::invalid_value(de::Unexpected::Str(&type_), &&*b),
82 )
83 }
84 }
85 (variant, Some(key)) => {
86 return Err(
87 de::Error::invalid_value(
88 de::Unexpected::Str(key.as_str()),
89 &variant.as_str(),
90 ),
91 );
92 }
93 (variant, None) => {
94 return Err(de::Error::missing_field(variant.as_str()));
95 }
96 }
97 }
98 Some(UnionField_::Value(variant)) => {
99 let value = match &variant {
100 Variant_::FirstPointMatchingCondition => {
101 let value = map.next_value()?;
102 OutputRangeStart::FirstPointMatchingCondition(value)
103 }
104 Variant_::AfterPersistenceWindow => {
105 let value = map.next_value()?;
106 OutputRangeStart::AfterPersistenceWindow(value)
107 }
108 Variant_::Unknown(type_) => {
109 let value = map.next_value()?;
110 OutputRangeStart::Unknown(Unknown {
111 type_: type_.clone(),
112 value,
113 })
114 }
115 };
116 if map.next_key::<UnionTypeField_>()?.is_none() {
117 return Err(de::Error::missing_field("type"));
118 }
119 let type_variant = map.next_value::<Variant_>()?;
120 if variant != type_variant {
121 return Err(
122 de::Error::invalid_value(
123 de::Unexpected::Str(type_variant.as_str()),
124 &variant.as_str(),
125 ),
126 );
127 }
128 value
129 }
130 None => return Err(de::Error::missing_field("type")),
131 };
132 if map.next_key::<UnionField_<Variant_>>()?.is_some() {
133 return Err(de::Error::invalid_length(3, &"type and value fields"));
134 }
135 Ok(v)
136 }
137}
138#[derive(PartialEq)]
139enum Variant_ {
140 FirstPointMatchingCondition,
141 AfterPersistenceWindow,
142 Unknown(Box<str>),
143}
144impl Variant_ {
145 fn as_str(&self) -> &'static str {
146 match *self {
147 Variant_::FirstPointMatchingCondition => "firstPointMatchingCondition",
148 Variant_::AfterPersistenceWindow => "afterPersistenceWindow",
149 Variant_::Unknown(_) => "unknown variant",
150 }
151 }
152}
153impl<'de> de::Deserialize<'de> for Variant_ {
154 fn deserialize<D>(d: D) -> Result<Variant_, D::Error>
155 where
156 D: de::Deserializer<'de>,
157 {
158 d.deserialize_str(VariantVisitor_)
159 }
160}
161struct VariantVisitor_;
162impl<'de> de::Visitor<'de> for VariantVisitor_ {
163 type Value = Variant_;
164 fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
165 fmt.write_str("string")
166 }
167 fn visit_str<E>(self, value: &str) -> Result<Variant_, E>
168 where
169 E: de::Error,
170 {
171 let v = match value {
172 "firstPointMatchingCondition" => Variant_::FirstPointMatchingCondition,
173 "afterPersistenceWindow" => Variant_::AfterPersistenceWindow,
174 value => Variant_::Unknown(value.to_string().into_boxed_str()),
175 };
176 Ok(v)
177 }
178}
179#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
181pub struct Unknown {
182 type_: Box<str>,
183 value: conjure_object::Any,
184}
185impl Unknown {
186 #[inline]
188 pub fn type_(&self) -> &str {
189 &self.type_
190 }
191}