datadog_api_client/datadogV1/model/
model_geomap_widget_request.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/// An updated geomap widget.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct GeomapWidgetRequest {
14    /// Widget columns.
15    #[serde(rename = "columns")]
16    pub columns: Option<Vec<crate::datadogV1::model::ListStreamColumn>>,
17    /// List of formulas that operate on queries.
18    #[serde(rename = "formulas")]
19    pub formulas: Option<Vec<crate::datadogV1::model::WidgetFormula>>,
20    /// The log query.
21    #[serde(rename = "log_query")]
22    pub log_query: Option<crate::datadogV1::model::LogQueryDefinition>,
23    /// The widget metrics query.
24    #[serde(rename = "q")]
25    pub q: Option<String>,
26    /// List of queries that can be returned directly or used in formulas.
27    #[serde(rename = "queries")]
28    pub queries: Option<Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>>,
29    /// Updated list stream widget.
30    #[serde(rename = "query")]
31    pub query: Option<crate::datadogV1::model::ListStreamQuery>,
32    /// Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets.
33    #[serde(rename = "response_format")]
34    pub response_format: Option<crate::datadogV1::model::FormulaAndFunctionResponseFormat>,
35    /// The log query.
36    #[serde(rename = "rum_query")]
37    pub rum_query: Option<crate::datadogV1::model::LogQueryDefinition>,
38    /// The log query.
39    #[serde(rename = "security_query")]
40    pub security_query: Option<crate::datadogV1::model::LogQueryDefinition>,
41    /// The controls for sorting the widget.
42    #[serde(rename = "sort")]
43    pub sort: Option<crate::datadogV1::model::WidgetSortBy>,
44    #[serde(flatten)]
45    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
46    #[serde(skip)]
47    #[serde(default)]
48    pub(crate) _unparsed: bool,
49}
50
51impl GeomapWidgetRequest {
52    pub fn new() -> GeomapWidgetRequest {
53        GeomapWidgetRequest {
54            columns: None,
55            formulas: None,
56            log_query: None,
57            q: None,
58            queries: None,
59            query: None,
60            response_format: None,
61            rum_query: None,
62            security_query: None,
63            sort: None,
64            additional_properties: std::collections::BTreeMap::new(),
65            _unparsed: false,
66        }
67    }
68
69    pub fn columns(mut self, value: Vec<crate::datadogV1::model::ListStreamColumn>) -> Self {
70        self.columns = Some(value);
71        self
72    }
73
74    pub fn formulas(mut self, value: Vec<crate::datadogV1::model::WidgetFormula>) -> Self {
75        self.formulas = Some(value);
76        self
77    }
78
79    pub fn log_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
80        self.log_query = Some(value);
81        self
82    }
83
84    pub fn q(mut self, value: String) -> Self {
85        self.q = Some(value);
86        self
87    }
88
89    pub fn queries(
90        mut self,
91        value: Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>,
92    ) -> Self {
93        self.queries = Some(value);
94        self
95    }
96
97    pub fn query(mut self, value: crate::datadogV1::model::ListStreamQuery) -> Self {
98        self.query = Some(value);
99        self
100    }
101
102    pub fn response_format(
103        mut self,
104        value: crate::datadogV1::model::FormulaAndFunctionResponseFormat,
105    ) -> Self {
106        self.response_format = Some(value);
107        self
108    }
109
110    pub fn rum_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
111        self.rum_query = Some(value);
112        self
113    }
114
115    pub fn security_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
116        self.security_query = Some(value);
117        self
118    }
119
120    pub fn sort(mut self, value: crate::datadogV1::model::WidgetSortBy) -> Self {
121        self.sort = Some(value);
122        self
123    }
124
125    pub fn additional_properties(
126        mut self,
127        value: std::collections::BTreeMap<String, serde_json::Value>,
128    ) -> Self {
129        self.additional_properties = value;
130        self
131    }
132}
133
134impl Default for GeomapWidgetRequest {
135    fn default() -> Self {
136        Self::new()
137    }
138}
139
140impl<'de> Deserialize<'de> for GeomapWidgetRequest {
141    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
142    where
143        D: Deserializer<'de>,
144    {
145        struct GeomapWidgetRequestVisitor;
146        impl<'a> Visitor<'a> for GeomapWidgetRequestVisitor {
147            type Value = GeomapWidgetRequest;
148
149            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
150                f.write_str("a mapping")
151            }
152
153            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
154            where
155                M: MapAccess<'a>,
156            {
157                let mut columns: Option<Vec<crate::datadogV1::model::ListStreamColumn>> = None;
158                let mut formulas: Option<Vec<crate::datadogV1::model::WidgetFormula>> = None;
159                let mut log_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
160                let mut q: Option<String> = None;
161                let mut queries: Option<
162                    Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>,
163                > = None;
164                let mut query: Option<crate::datadogV1::model::ListStreamQuery> = None;
165                let mut response_format: Option<
166                    crate::datadogV1::model::FormulaAndFunctionResponseFormat,
167                > = None;
168                let mut rum_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
169                let mut security_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
170                let mut sort: Option<crate::datadogV1::model::WidgetSortBy> = None;
171                let mut additional_properties: std::collections::BTreeMap<
172                    String,
173                    serde_json::Value,
174                > = std::collections::BTreeMap::new();
175                let mut _unparsed = false;
176
177                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
178                    match k.as_str() {
179                        "columns" => {
180                            if v.is_null() {
181                                continue;
182                            }
183                            columns = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
184                        }
185                        "formulas" => {
186                            if v.is_null() {
187                                continue;
188                            }
189                            formulas = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
190                        }
191                        "log_query" => {
192                            if v.is_null() {
193                                continue;
194                            }
195                            log_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
196                        }
197                        "q" => {
198                            if v.is_null() {
199                                continue;
200                            }
201                            q = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
202                        }
203                        "queries" => {
204                            if v.is_null() {
205                                continue;
206                            }
207                            queries = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
208                        }
209                        "query" => {
210                            if v.is_null() {
211                                continue;
212                            }
213                            query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
214                        }
215                        "response_format" => {
216                            if v.is_null() {
217                                continue;
218                            }
219                            response_format =
220                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
221                            if let Some(ref _response_format) = response_format {
222                                match _response_format {
223                                    crate::datadogV1::model::FormulaAndFunctionResponseFormat::UnparsedObject(_response_format) => {
224                                        _unparsed = true;
225                                    },
226                                    _ => {}
227                                }
228                            }
229                        }
230                        "rum_query" => {
231                            if v.is_null() {
232                                continue;
233                            }
234                            rum_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
235                        }
236                        "security_query" => {
237                            if v.is_null() {
238                                continue;
239                            }
240                            security_query =
241                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
242                        }
243                        "sort" => {
244                            if v.is_null() {
245                                continue;
246                            }
247                            sort = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
248                        }
249                        &_ => {
250                            if let Ok(value) = serde_json::from_value(v.clone()) {
251                                additional_properties.insert(k, value);
252                            }
253                        }
254                    }
255                }
256
257                let content = GeomapWidgetRequest {
258                    columns,
259                    formulas,
260                    log_query,
261                    q,
262                    queries,
263                    query,
264                    response_format,
265                    rum_query,
266                    security_query,
267                    sort,
268                    additional_properties,
269                    _unparsed,
270                };
271
272                Ok(content)
273            }
274        }
275
276        deserializer.deserialize_any(GeomapWidgetRequestVisitor)
277    }
278}