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