datadog_api_client/datadogV1/model/
model_query_value_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/// Updated query value widget.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct QueryValueWidgetRequest {
14    /// Aggregator used for the request.
15    #[serde(rename = "aggregator")]
16    pub aggregator: Option<crate::datadogV1::model::WidgetAggregator>,
17    /// The log query.
18    #[serde(rename = "apm_query")]
19    pub apm_query: Option<crate::datadogV1::model::LogQueryDefinition>,
20    /// The log query.
21    #[serde(rename = "audit_query")]
22    pub audit_query: Option<crate::datadogV1::model::LogQueryDefinition>,
23    /// List of conditional formats.
24    #[serde(rename = "conditional_formats")]
25    pub conditional_formats: Option<Vec<crate::datadogV1::model::WidgetConditionalFormat>>,
26    /// The log query.
27    #[serde(rename = "event_query")]
28    pub event_query: Option<crate::datadogV1::model::LogQueryDefinition>,
29    /// List of formulas that operate on queries.
30    #[serde(rename = "formulas")]
31    pub formulas: Option<Vec<crate::datadogV1::model::WidgetFormula>>,
32    /// The log query.
33    #[serde(rename = "log_query")]
34    pub log_query: Option<crate::datadogV1::model::LogQueryDefinition>,
35    /// The log query.
36    #[serde(rename = "network_query")]
37    pub network_query: Option<crate::datadogV1::model::LogQueryDefinition>,
38    /// The process query to use in the widget.
39    #[serde(rename = "process_query")]
40    pub process_query: Option<crate::datadogV1::model::ProcessQueryDefinition>,
41    /// The log query.
42    #[serde(rename = "profile_metrics_query")]
43    pub profile_metrics_query: Option<crate::datadogV1::model::LogQueryDefinition>,
44    /// TODO.
45    #[serde(rename = "q")]
46    pub q: Option<String>,
47    /// List of queries that can be returned directly or used in formulas.
48    #[serde(rename = "queries")]
49    pub queries: Option<Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>>,
50    /// Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets.
51    #[serde(rename = "response_format")]
52    pub response_format: Option<crate::datadogV1::model::FormulaAndFunctionResponseFormat>,
53    /// The log query.
54    #[serde(rename = "rum_query")]
55    pub rum_query: Option<crate::datadogV1::model::LogQueryDefinition>,
56    /// The log query.
57    #[serde(rename = "security_query")]
58    pub security_query: Option<crate::datadogV1::model::LogQueryDefinition>,
59    #[serde(flatten)]
60    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
61    #[serde(skip)]
62    #[serde(default)]
63    pub(crate) _unparsed: bool,
64}
65
66impl QueryValueWidgetRequest {
67    pub fn new() -> QueryValueWidgetRequest {
68        QueryValueWidgetRequest {
69            aggregator: None,
70            apm_query: None,
71            audit_query: None,
72            conditional_formats: None,
73            event_query: None,
74            formulas: None,
75            log_query: None,
76            network_query: None,
77            process_query: None,
78            profile_metrics_query: None,
79            q: None,
80            queries: None,
81            response_format: None,
82            rum_query: None,
83            security_query: None,
84            additional_properties: std::collections::BTreeMap::new(),
85            _unparsed: false,
86        }
87    }
88
89    pub fn aggregator(mut self, value: crate::datadogV1::model::WidgetAggregator) -> Self {
90        self.aggregator = Some(value);
91        self
92    }
93
94    pub fn apm_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
95        self.apm_query = Some(value);
96        self
97    }
98
99    pub fn audit_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
100        self.audit_query = Some(value);
101        self
102    }
103
104    pub fn conditional_formats(
105        mut self,
106        value: Vec<crate::datadogV1::model::WidgetConditionalFormat>,
107    ) -> Self {
108        self.conditional_formats = Some(value);
109        self
110    }
111
112    pub fn event_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
113        self.event_query = Some(value);
114        self
115    }
116
117    pub fn formulas(mut self, value: Vec<crate::datadogV1::model::WidgetFormula>) -> Self {
118        self.formulas = Some(value);
119        self
120    }
121
122    pub fn log_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
123        self.log_query = Some(value);
124        self
125    }
126
127    pub fn network_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
128        self.network_query = Some(value);
129        self
130    }
131
132    pub fn process_query(mut self, value: crate::datadogV1::model::ProcessQueryDefinition) -> Self {
133        self.process_query = Some(value);
134        self
135    }
136
137    pub fn profile_metrics_query(
138        mut self,
139        value: crate::datadogV1::model::LogQueryDefinition,
140    ) -> Self {
141        self.profile_metrics_query = Some(value);
142        self
143    }
144
145    pub fn q(mut self, value: String) -> Self {
146        self.q = Some(value);
147        self
148    }
149
150    pub fn queries(
151        mut self,
152        value: Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>,
153    ) -> Self {
154        self.queries = Some(value);
155        self
156    }
157
158    pub fn response_format(
159        mut self,
160        value: crate::datadogV1::model::FormulaAndFunctionResponseFormat,
161    ) -> Self {
162        self.response_format = Some(value);
163        self
164    }
165
166    pub fn rum_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
167        self.rum_query = Some(value);
168        self
169    }
170
171    pub fn security_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
172        self.security_query = Some(value);
173        self
174    }
175
176    pub fn additional_properties(
177        mut self,
178        value: std::collections::BTreeMap<String, serde_json::Value>,
179    ) -> Self {
180        self.additional_properties = value;
181        self
182    }
183}
184
185impl Default for QueryValueWidgetRequest {
186    fn default() -> Self {
187        Self::new()
188    }
189}
190
191impl<'de> Deserialize<'de> for QueryValueWidgetRequest {
192    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
193    where
194        D: Deserializer<'de>,
195    {
196        struct QueryValueWidgetRequestVisitor;
197        impl<'a> Visitor<'a> for QueryValueWidgetRequestVisitor {
198            type Value = QueryValueWidgetRequest;
199
200            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
201                f.write_str("a mapping")
202            }
203
204            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
205            where
206                M: MapAccess<'a>,
207            {
208                let mut aggregator: Option<crate::datadogV1::model::WidgetAggregator> = None;
209                let mut apm_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
210                let mut audit_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
211                let mut conditional_formats: Option<
212                    Vec<crate::datadogV1::model::WidgetConditionalFormat>,
213                > = None;
214                let mut event_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
215                let mut formulas: Option<Vec<crate::datadogV1::model::WidgetFormula>> = None;
216                let mut log_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
217                let mut network_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
218                let mut process_query: Option<crate::datadogV1::model::ProcessQueryDefinition> =
219                    None;
220                let mut profile_metrics_query: Option<crate::datadogV1::model::LogQueryDefinition> =
221                    None;
222                let mut q: Option<String> = None;
223                let mut queries: Option<
224                    Vec<crate::datadogV1::model::FormulaAndFunctionQueryDefinition>,
225                > = None;
226                let mut response_format: Option<
227                    crate::datadogV1::model::FormulaAndFunctionResponseFormat,
228                > = None;
229                let mut rum_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
230                let mut security_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
231                let mut additional_properties: std::collections::BTreeMap<
232                    String,
233                    serde_json::Value,
234                > = std::collections::BTreeMap::new();
235                let mut _unparsed = false;
236
237                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
238                    match k.as_str() {
239                        "aggregator" => {
240                            if v.is_null() {
241                                continue;
242                            }
243                            aggregator = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
244                            if let Some(ref _aggregator) = aggregator {
245                                match _aggregator {
246                                    crate::datadogV1::model::WidgetAggregator::UnparsedObject(
247                                        _aggregator,
248                                    ) => {
249                                        _unparsed = true;
250                                    }
251                                    _ => {}
252                                }
253                            }
254                        }
255                        "apm_query" => {
256                            if v.is_null() {
257                                continue;
258                            }
259                            apm_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
260                        }
261                        "audit_query" => {
262                            if v.is_null() {
263                                continue;
264                            }
265                            audit_query =
266                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
267                        }
268                        "conditional_formats" => {
269                            if v.is_null() {
270                                continue;
271                            }
272                            conditional_formats =
273                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
274                        }
275                        "event_query" => {
276                            if v.is_null() {
277                                continue;
278                            }
279                            event_query =
280                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
281                        }
282                        "formulas" => {
283                            if v.is_null() {
284                                continue;
285                            }
286                            formulas = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
287                        }
288                        "log_query" => {
289                            if v.is_null() {
290                                continue;
291                            }
292                            log_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
293                        }
294                        "network_query" => {
295                            if v.is_null() {
296                                continue;
297                            }
298                            network_query =
299                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
300                        }
301                        "process_query" => {
302                            if v.is_null() {
303                                continue;
304                            }
305                            process_query =
306                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
307                        }
308                        "profile_metrics_query" => {
309                            if v.is_null() {
310                                continue;
311                            }
312                            profile_metrics_query =
313                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
314                        }
315                        "q" => {
316                            if v.is_null() {
317                                continue;
318                            }
319                            q = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
320                        }
321                        "queries" => {
322                            if v.is_null() {
323                                continue;
324                            }
325                            queries = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
326                        }
327                        "response_format" => {
328                            if v.is_null() {
329                                continue;
330                            }
331                            response_format =
332                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
333                            if let Some(ref _response_format) = response_format {
334                                match _response_format {
335                                    crate::datadogV1::model::FormulaAndFunctionResponseFormat::UnparsedObject(_response_format) => {
336                                        _unparsed = true;
337                                    },
338                                    _ => {}
339                                }
340                            }
341                        }
342                        "rum_query" => {
343                            if v.is_null() {
344                                continue;
345                            }
346                            rum_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
347                        }
348                        "security_query" => {
349                            if v.is_null() {
350                                continue;
351                            }
352                            security_query =
353                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
354                        }
355                        &_ => {
356                            if let Ok(value) = serde_json::from_value(v.clone()) {
357                                additional_properties.insert(k, value);
358                            }
359                        }
360                    }
361                }
362
363                let content = QueryValueWidgetRequest {
364                    aggregator,
365                    apm_query,
366                    audit_query,
367                    conditional_formats,
368                    event_query,
369                    formulas,
370                    log_query,
371                    network_query,
372                    process_query,
373                    profile_metrics_query,
374                    q,
375                    queries,
376                    response_format,
377                    rum_query,
378                    security_query,
379                    additional_properties,
380                    _unparsed,
381                };
382
383                Ok(content)
384            }
385        }
386
387        deserializer.deserialize_any(QueryValueWidgetRequestVisitor)
388    }
389}