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