datadog_api_client/datadogV2/model/
model_output_schema_parameters.rs1use serde::de::{Error, MapAccess, Visitor};
5use serde::{Deserialize, Deserializer, Serialize};
6use serde_with::skip_serializing_none;
7use std::fmt::{self, Formatter};
8
9#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct OutputSchemaParameters {
14 #[serde(rename = "defaultValue")]
16 pub default_value: Option<serde_json::Value>,
17 #[serde(rename = "description")]
19 pub description: Option<String>,
20 #[serde(rename = "label")]
22 pub label: Option<String>,
23 #[serde(rename = "name")]
25 pub name: String,
26 #[serde(rename = "type")]
28 pub type_: crate::datadogV2::model::OutputSchemaParametersType,
29 #[serde(rename = "value")]
31 pub value: Option<serde_json::Value>,
32 #[serde(flatten)]
33 pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
34 #[serde(skip)]
35 #[serde(default)]
36 pub(crate) _unparsed: bool,
37}
38
39impl OutputSchemaParameters {
40 pub fn new(
41 name: String,
42 type_: crate::datadogV2::model::OutputSchemaParametersType,
43 ) -> OutputSchemaParameters {
44 OutputSchemaParameters {
45 default_value: None,
46 description: None,
47 label: None,
48 name,
49 type_,
50 value: None,
51 additional_properties: std::collections::BTreeMap::new(),
52 _unparsed: false,
53 }
54 }
55
56 pub fn default_value(mut self, value: serde_json::Value) -> Self {
57 self.default_value = Some(value);
58 self
59 }
60
61 pub fn description(mut self, value: String) -> Self {
62 self.description = Some(value);
63 self
64 }
65
66 pub fn label(mut self, value: String) -> Self {
67 self.label = Some(value);
68 self
69 }
70
71 pub fn value(mut self, value: serde_json::Value) -> Self {
72 self.value = Some(value);
73 self
74 }
75
76 pub fn additional_properties(
77 mut self,
78 value: std::collections::BTreeMap<String, serde_json::Value>,
79 ) -> Self {
80 self.additional_properties = value;
81 self
82 }
83}
84
85impl<'de> Deserialize<'de> for OutputSchemaParameters {
86 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
87 where
88 D: Deserializer<'de>,
89 {
90 struct OutputSchemaParametersVisitor;
91 impl<'a> Visitor<'a> for OutputSchemaParametersVisitor {
92 type Value = OutputSchemaParameters;
93
94 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
95 f.write_str("a mapping")
96 }
97
98 fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
99 where
100 M: MapAccess<'a>,
101 {
102 let mut default_value: Option<serde_json::Value> = None;
103 let mut description: Option<String> = None;
104 let mut label: Option<String> = None;
105 let mut name: Option<String> = None;
106 let mut type_: Option<crate::datadogV2::model::OutputSchemaParametersType> = None;
107 let mut value: Option<serde_json::Value> = None;
108 let mut additional_properties: std::collections::BTreeMap<
109 String,
110 serde_json::Value,
111 > = std::collections::BTreeMap::new();
112 let mut _unparsed = false;
113
114 while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
115 match k.as_str() {
116 "defaultValue" => {
117 if v.is_null() {
118 continue;
119 }
120 default_value =
121 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
122 }
123 "description" => {
124 if v.is_null() {
125 continue;
126 }
127 description =
128 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
129 }
130 "label" => {
131 if v.is_null() {
132 continue;
133 }
134 label = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
135 }
136 "name" => {
137 name = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
138 }
139 "type" => {
140 type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
141 if let Some(ref _type_) = type_ {
142 match _type_ {
143 crate::datadogV2::model::OutputSchemaParametersType::UnparsedObject(_type_) => {
144 _unparsed = true;
145 },
146 _ => {}
147 }
148 }
149 }
150 "value" => {
151 if v.is_null() {
152 continue;
153 }
154 value = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
155 }
156 &_ => {
157 if let Ok(value) = serde_json::from_value(v.clone()) {
158 additional_properties.insert(k, value);
159 }
160 }
161 }
162 }
163 let name = name.ok_or_else(|| M::Error::missing_field("name"))?;
164 let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
165
166 let content = OutputSchemaParameters {
167 default_value,
168 description,
169 label,
170 name,
171 type_,
172 value,
173 additional_properties,
174 _unparsed,
175 };
176
177 Ok(content)
178 }
179 }
180
181 deserializer.deserialize_any(OutputSchemaParametersVisitor)
182 }
183}