datadog_api_client/datadogV1/model/
model_tree_map_widget_definition.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 TreeMapWidgetDefinition {
14 #[deprecated]
16 #[serde(rename = "color_by")]
17 pub color_by: Option<crate::datadogV1::model::TreeMapColorBy>,
18 #[serde(rename = "custom_links")]
20 pub custom_links: Option<Vec<crate::datadogV1::model::WidgetCustomLink>>,
21 #[deprecated]
23 #[serde(rename = "group_by")]
24 pub group_by: Option<crate::datadogV1::model::TreeMapGroupBy>,
25 #[serde(rename = "requests")]
27 pub requests: Vec<crate::datadogV1::model::TreeMapWidgetRequest>,
28 #[deprecated]
30 #[serde(rename = "size_by")]
31 pub size_by: Option<crate::datadogV1::model::TreeMapSizeBy>,
32 #[serde(rename = "time")]
34 pub time: Option<crate::datadogV1::model::WidgetTime>,
35 #[serde(rename = "title")]
37 pub title: Option<String>,
38 #[serde(rename = "type")]
40 pub type_: crate::datadogV1::model::TreeMapWidgetDefinitionType,
41 #[serde(flatten)]
42 pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
43 #[serde(skip)]
44 #[serde(default)]
45 pub(crate) _unparsed: bool,
46}
47
48impl TreeMapWidgetDefinition {
49 pub fn new(
50 requests: Vec<crate::datadogV1::model::TreeMapWidgetRequest>,
51 type_: crate::datadogV1::model::TreeMapWidgetDefinitionType,
52 ) -> TreeMapWidgetDefinition {
53 #[allow(deprecated)]
54 TreeMapWidgetDefinition {
55 color_by: None,
56 custom_links: None,
57 group_by: None,
58 requests,
59 size_by: None,
60 time: None,
61 title: None,
62 type_,
63 additional_properties: std::collections::BTreeMap::new(),
64 _unparsed: false,
65 }
66 }
67
68 #[allow(deprecated)]
69 pub fn color_by(mut self, value: crate::datadogV1::model::TreeMapColorBy) -> Self {
70 self.color_by = Some(value);
71 self
72 }
73
74 #[allow(deprecated)]
75 pub fn custom_links(mut self, value: Vec<crate::datadogV1::model::WidgetCustomLink>) -> Self {
76 self.custom_links = Some(value);
77 self
78 }
79
80 #[allow(deprecated)]
81 pub fn group_by(mut self, value: crate::datadogV1::model::TreeMapGroupBy) -> Self {
82 self.group_by = Some(value);
83 self
84 }
85
86 #[allow(deprecated)]
87 pub fn size_by(mut self, value: crate::datadogV1::model::TreeMapSizeBy) -> Self {
88 self.size_by = Some(value);
89 self
90 }
91
92 #[allow(deprecated)]
93 pub fn time(mut self, value: crate::datadogV1::model::WidgetTime) -> Self {
94 self.time = Some(value);
95 self
96 }
97
98 #[allow(deprecated)]
99 pub fn title(mut self, value: String) -> Self {
100 self.title = Some(value);
101 self
102 }
103
104 pub fn additional_properties(
105 mut self,
106 value: std::collections::BTreeMap<String, serde_json::Value>,
107 ) -> Self {
108 self.additional_properties = value;
109 self
110 }
111}
112
113impl<'de> Deserialize<'de> for TreeMapWidgetDefinition {
114 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
115 where
116 D: Deserializer<'de>,
117 {
118 struct TreeMapWidgetDefinitionVisitor;
119 impl<'a> Visitor<'a> for TreeMapWidgetDefinitionVisitor {
120 type Value = TreeMapWidgetDefinition;
121
122 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
123 f.write_str("a mapping")
124 }
125
126 fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
127 where
128 M: MapAccess<'a>,
129 {
130 let mut color_by: Option<crate::datadogV1::model::TreeMapColorBy> = None;
131 let mut custom_links: Option<Vec<crate::datadogV1::model::WidgetCustomLink>> = None;
132 let mut group_by: Option<crate::datadogV1::model::TreeMapGroupBy> = None;
133 let mut requests: Option<Vec<crate::datadogV1::model::TreeMapWidgetRequest>> = None;
134 let mut size_by: Option<crate::datadogV1::model::TreeMapSizeBy> = None;
135 let mut time: Option<crate::datadogV1::model::WidgetTime> = None;
136 let mut title: Option<String> = None;
137 let mut type_: Option<crate::datadogV1::model::TreeMapWidgetDefinitionType> = None;
138 let mut additional_properties: std::collections::BTreeMap<
139 String,
140 serde_json::Value,
141 > = std::collections::BTreeMap::new();
142 let mut _unparsed = false;
143
144 while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
145 match k.as_str() {
146 "color_by" => {
147 if v.is_null() {
148 continue;
149 }
150 color_by = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
151 if let Some(ref _color_by) = color_by {
152 match _color_by {
153 crate::datadogV1::model::TreeMapColorBy::UnparsedObject(
154 _color_by,
155 ) => {
156 _unparsed = true;
157 }
158 _ => {}
159 }
160 }
161 }
162 "custom_links" => {
163 if v.is_null() {
164 continue;
165 }
166 custom_links =
167 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
168 }
169 "group_by" => {
170 if v.is_null() {
171 continue;
172 }
173 group_by = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
174 if let Some(ref _group_by) = group_by {
175 match _group_by {
176 crate::datadogV1::model::TreeMapGroupBy::UnparsedObject(
177 _group_by,
178 ) => {
179 _unparsed = true;
180 }
181 _ => {}
182 }
183 }
184 }
185 "requests" => {
186 requests = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
187 }
188 "size_by" => {
189 if v.is_null() {
190 continue;
191 }
192 size_by = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
193 if let Some(ref _size_by) = size_by {
194 match _size_by {
195 crate::datadogV1::model::TreeMapSizeBy::UnparsedObject(
196 _size_by,
197 ) => {
198 _unparsed = true;
199 }
200 _ => {}
201 }
202 }
203 }
204 "time" => {
205 if v.is_null() {
206 continue;
207 }
208 time = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
209 if let Some(ref _time) = time {
210 match _time {
211 crate::datadogV1::model::WidgetTime::UnparsedObject(_time) => {
212 _unparsed = true;
213 }
214 _ => {}
215 }
216 }
217 }
218 "title" => {
219 if v.is_null() {
220 continue;
221 }
222 title = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
223 }
224 "type" => {
225 type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
226 if let Some(ref _type_) = type_ {
227 match _type_ {
228 crate::datadogV1::model::TreeMapWidgetDefinitionType::UnparsedObject(_type_) => {
229 _unparsed = true;
230 },
231 _ => {}
232 }
233 }
234 }
235 &_ => {
236 if let Ok(value) = serde_json::from_value(v.clone()) {
237 additional_properties.insert(k, value);
238 }
239 }
240 }
241 }
242 let requests = requests.ok_or_else(|| M::Error::missing_field("requests"))?;
243 let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
244
245 #[allow(deprecated)]
246 let content = TreeMapWidgetDefinition {
247 color_by,
248 custom_links,
249 group_by,
250 requests,
251 size_by,
252 time,
253 title,
254 type_,
255 additional_properties,
256 _unparsed,
257 };
258
259 Ok(content)
260 }
261 }
262
263 deserializer.deserialize_any(TreeMapWidgetDefinitionVisitor)
264 }
265}