datadog_api_client/datadogV1/model/
model_tree_map_widget_definition.rs

1// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2// This product includes software developed at Datadog (https://www.datadoghq.com/).
3// Copyright 2019-Present Datadog, Inc.
4use serde::de::{Error, MapAccess, Visitor};
5use serde::{Deserialize, Deserializer, Serialize};
6use serde_with::skip_serializing_none;
7use std::fmt::{self, Formatter};
8
9/// The treemap visualization enables you to display hierarchical and nested data. It is well suited for queries that describe part-whole relationships, such as resource usage by availability zone, data center, or team.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct TreeMapWidgetDefinition {
14    /// (deprecated) The attribute formerly used to determine color in the widget.
15    #[deprecated]
16    #[serde(rename = "color_by")]
17    pub color_by: Option<crate::datadogV1::model::TreeMapColorBy>,
18    /// List of custom links.
19    #[serde(rename = "custom_links")]
20    pub custom_links: Option<Vec<crate::datadogV1::model::WidgetCustomLink>>,
21    /// (deprecated) The attribute formerly used to group elements in the widget.
22    #[deprecated]
23    #[serde(rename = "group_by")]
24    pub group_by: Option<crate::datadogV1::model::TreeMapGroupBy>,
25    /// List of treemap widget requests.
26    #[serde(rename = "requests")]
27    pub requests: Vec<crate::datadogV1::model::TreeMapWidgetRequest>,
28    /// (deprecated) The attribute formerly used to determine size in the widget.
29    #[deprecated]
30    #[serde(rename = "size_by")]
31    pub size_by: Option<crate::datadogV1::model::TreeMapSizeBy>,
32    /// Time setting for the widget.
33    #[serde(rename = "time")]
34    pub time: Option<crate::datadogV1::model::WidgetTime>,
35    /// Title of your widget.
36    #[serde(rename = "title")]
37    pub title: Option<String>,
38    /// Type of the treemap widget.
39    #[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}