datadog_api_client/datadogV1/model/
model_scatter_plot_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 scatter plot.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct ScatterPlotRequest {
14    /// Aggregator used for the request.
15    #[serde(rename = "aggregator")]
16    pub aggregator: Option<crate::datadogV1::model::ScatterplotWidgetAggregator>,
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 = "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    /// Query definition.
36    #[serde(rename = "q")]
37    pub q: Option<String>,
38    /// The log query.
39    #[serde(rename = "rum_query")]
40    pub rum_query: Option<crate::datadogV1::model::LogQueryDefinition>,
41    /// The log query.
42    #[serde(rename = "security_query")]
43    pub security_query: Option<crate::datadogV1::model::LogQueryDefinition>,
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 ScatterPlotRequest {
52    pub fn new() -> ScatterPlotRequest {
53        ScatterPlotRequest {
54            aggregator: None,
55            apm_query: None,
56            event_query: None,
57            log_query: None,
58            network_query: None,
59            process_query: None,
60            profile_metrics_query: None,
61            q: None,
62            rum_query: None,
63            security_query: None,
64            additional_properties: std::collections::BTreeMap::new(),
65            _unparsed: false,
66        }
67    }
68
69    pub fn aggregator(
70        mut self,
71        value: crate::datadogV1::model::ScatterplotWidgetAggregator,
72    ) -> Self {
73        self.aggregator = Some(value);
74        self
75    }
76
77    pub fn apm_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
78        self.apm_query = Some(value);
79        self
80    }
81
82    pub fn event_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
83        self.event_query = Some(value);
84        self
85    }
86
87    pub fn log_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
88        self.log_query = Some(value);
89        self
90    }
91
92    pub fn network_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
93        self.network_query = Some(value);
94        self
95    }
96
97    pub fn process_query(mut self, value: crate::datadogV1::model::ProcessQueryDefinition) -> Self {
98        self.process_query = Some(value);
99        self
100    }
101
102    pub fn profile_metrics_query(
103        mut self,
104        value: crate::datadogV1::model::LogQueryDefinition,
105    ) -> Self {
106        self.profile_metrics_query = Some(value);
107        self
108    }
109
110    pub fn q(mut self, value: String) -> Self {
111        self.q = Some(value);
112        self
113    }
114
115    pub fn rum_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
116        self.rum_query = Some(value);
117        self
118    }
119
120    pub fn security_query(mut self, value: crate::datadogV1::model::LogQueryDefinition) -> Self {
121        self.security_query = 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 ScatterPlotRequest {
135    fn default() -> Self {
136        Self::new()
137    }
138}
139
140impl<'de> Deserialize<'de> for ScatterPlotRequest {
141    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
142    where
143        D: Deserializer<'de>,
144    {
145        struct ScatterPlotRequestVisitor;
146        impl<'a> Visitor<'a> for ScatterPlotRequestVisitor {
147            type Value = ScatterPlotRequest;
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 aggregator: Option<crate::datadogV1::model::ScatterplotWidgetAggregator> =
158                    None;
159                let mut apm_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
160                let mut event_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
161                let mut log_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
162                let mut network_query: Option<crate::datadogV1::model::LogQueryDefinition> = None;
163                let mut process_query: Option<crate::datadogV1::model::ProcessQueryDefinition> =
164                    None;
165                let mut profile_metrics_query: Option<crate::datadogV1::model::LogQueryDefinition> =
166                    None;
167                let mut q: Option<String> = 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 additional_properties: std::collections::BTreeMap<
171                    String,
172                    serde_json::Value,
173                > = std::collections::BTreeMap::new();
174                let mut _unparsed = false;
175
176                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
177                    match k.as_str() {
178                        "aggregator" => {
179                            if v.is_null() {
180                                continue;
181                            }
182                            aggregator = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
183                            if let Some(ref _aggregator) = aggregator {
184                                match _aggregator {
185                                    crate::datadogV1::model::ScatterplotWidgetAggregator::UnparsedObject(_aggregator) => {
186                                        _unparsed = true;
187                                    },
188                                    _ => {}
189                                }
190                            }
191                        }
192                        "apm_query" => {
193                            if v.is_null() {
194                                continue;
195                            }
196                            apm_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
197                        }
198                        "event_query" => {
199                            if v.is_null() {
200                                continue;
201                            }
202                            event_query =
203                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
204                        }
205                        "log_query" => {
206                            if v.is_null() {
207                                continue;
208                            }
209                            log_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
210                        }
211                        "network_query" => {
212                            if v.is_null() {
213                                continue;
214                            }
215                            network_query =
216                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
217                        }
218                        "process_query" => {
219                            if v.is_null() {
220                                continue;
221                            }
222                            process_query =
223                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
224                        }
225                        "profile_metrics_query" => {
226                            if v.is_null() {
227                                continue;
228                            }
229                            profile_metrics_query =
230                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
231                        }
232                        "q" => {
233                            if v.is_null() {
234                                continue;
235                            }
236                            q = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
237                        }
238                        "rum_query" => {
239                            if v.is_null() {
240                                continue;
241                            }
242                            rum_query = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
243                        }
244                        "security_query" => {
245                            if v.is_null() {
246                                continue;
247                            }
248                            security_query =
249                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
250                        }
251                        &_ => {
252                            if let Ok(value) = serde_json::from_value(v.clone()) {
253                                additional_properties.insert(k, value);
254                            }
255                        }
256                    }
257                }
258
259                let content = ScatterPlotRequest {
260                    aggregator,
261                    apm_query,
262                    event_query,
263                    log_query,
264                    network_query,
265                    process_query,
266                    profile_metrics_query,
267                    q,
268                    rum_query,
269                    security_query,
270                    additional_properties,
271                    _unparsed,
272                };
273
274                Ok(content)
275            }
276        }
277
278        deserializer.deserialize_any(ScatterPlotRequestVisitor)
279    }
280}