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