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