datadog_api_client/datadogV1/model/
model_shared_dashboard_update_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/// Update a shared dashboard's settings.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct SharedDashboardUpdateRequest {
14    /// The `SharedDashboard` `embeddable_domains`.
15    #[serde(rename = "embeddable_domains")]
16    pub embeddable_domains: Option<Vec<String>>,
17    /// The time when an OPEN shared dashboard becomes publicly unavailable.
18    #[serde(
19        rename = "expiration",
20        default,
21        with = "::serde_with::rust::double_option"
22    )]
23    pub expiration: Option<Option<chrono::DateTime<chrono::Utc>>>,
24    /// Timeframe setting for the shared dashboard.
25    #[serde(
26        rename = "global_time",
27        default,
28        with = "::serde_with::rust::double_option"
29    )]
30    pub global_time:
31        Option<Option<crate::datadogV1::model::SharedDashboardUpdateRequestGlobalTime>>,
32    /// Whether to allow viewers to select a different global time setting for the shared dashboard.
33    #[serde(
34        rename = "global_time_selectable_enabled",
35        default,
36        with = "::serde_with::rust::double_option"
37    )]
38    pub global_time_selectable_enabled: Option<Option<bool>>,
39    /// The `SharedDashboard` `invitees`.
40    #[serde(rename = "invitees")]
41    pub invitees: Option<Vec<crate::datadogV1::model::SharedDashboardInviteesItems>>,
42    /// List of objects representing template variables on the shared dashboard which can have selectable values.
43    #[serde(
44        rename = "selectable_template_vars",
45        default,
46        with = "::serde_with::rust::double_option"
47    )]
48    pub selectable_template_vars:
49        Option<Option<Vec<crate::datadogV1::model::SelectableTemplateVariableItems>>>,
50    /// List of email addresses that can be given access to the shared dashboard.
51    #[deprecated]
52    #[serde(
53        rename = "share_list",
54        default,
55        with = "::serde_with::rust::double_option"
56    )]
57    pub share_list: Option<Option<Vec<String>>>,
58    /// Type of sharing access (either open to anyone who has the public URL or invite-only).
59    #[serde(
60        rename = "share_type",
61        default,
62        with = "::serde_with::rust::double_option"
63    )]
64    pub share_type: Option<Option<crate::datadogV1::model::DashboardShareType>>,
65    /// Active means the dashboard is publicly available. Paused means the dashboard is not publicly available.
66    #[serde(rename = "status")]
67    pub status: Option<crate::datadogV1::model::SharedDashboardStatus>,
68    /// Title of the shared dashboard.
69    #[serde(rename = "title")]
70    pub title: Option<String>,
71    /// The viewing preferences for a shared dashboard.
72    #[serde(rename = "viewing_preferences")]
73    pub viewing_preferences: Option<crate::datadogV1::model::ViewingPreferences>,
74    #[serde(flatten)]
75    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
76    #[serde(skip)]
77    #[serde(default)]
78    pub(crate) _unparsed: bool,
79}
80
81impl SharedDashboardUpdateRequest {
82    pub fn new() -> SharedDashboardUpdateRequest {
83        #[allow(deprecated)]
84        SharedDashboardUpdateRequest {
85            embeddable_domains: None,
86            expiration: None,
87            global_time: None,
88            global_time_selectable_enabled: None,
89            invitees: None,
90            selectable_template_vars: None,
91            share_list: None,
92            share_type: None,
93            status: None,
94            title: None,
95            viewing_preferences: None,
96            additional_properties: std::collections::BTreeMap::new(),
97            _unparsed: false,
98        }
99    }
100
101    #[allow(deprecated)]
102    pub fn embeddable_domains(mut self, value: Vec<String>) -> Self {
103        self.embeddable_domains = Some(value);
104        self
105    }
106
107    #[allow(deprecated)]
108    pub fn expiration(mut self, value: Option<chrono::DateTime<chrono::Utc>>) -> Self {
109        self.expiration = Some(value);
110        self
111    }
112
113    #[allow(deprecated)]
114    pub fn global_time(
115        mut self,
116        value: Option<crate::datadogV1::model::SharedDashboardUpdateRequestGlobalTime>,
117    ) -> Self {
118        self.global_time = Some(value);
119        self
120    }
121
122    #[allow(deprecated)]
123    pub fn global_time_selectable_enabled(mut self, value: Option<bool>) -> Self {
124        self.global_time_selectable_enabled = Some(value);
125        self
126    }
127
128    #[allow(deprecated)]
129    pub fn invitees(
130        mut self,
131        value: Vec<crate::datadogV1::model::SharedDashboardInviteesItems>,
132    ) -> Self {
133        self.invitees = Some(value);
134        self
135    }
136
137    #[allow(deprecated)]
138    pub fn selectable_template_vars(
139        mut self,
140        value: Option<Vec<crate::datadogV1::model::SelectableTemplateVariableItems>>,
141    ) -> Self {
142        self.selectable_template_vars = Some(value);
143        self
144    }
145
146    #[allow(deprecated)]
147    pub fn share_list(mut self, value: Option<Vec<String>>) -> Self {
148        self.share_list = Some(value);
149        self
150    }
151
152    #[allow(deprecated)]
153    pub fn share_type(
154        mut self,
155        value: Option<crate::datadogV1::model::DashboardShareType>,
156    ) -> Self {
157        self.share_type = Some(value);
158        self
159    }
160
161    #[allow(deprecated)]
162    pub fn status(mut self, value: crate::datadogV1::model::SharedDashboardStatus) -> Self {
163        self.status = Some(value);
164        self
165    }
166
167    #[allow(deprecated)]
168    pub fn title(mut self, value: String) -> Self {
169        self.title = Some(value);
170        self
171    }
172
173    #[allow(deprecated)]
174    pub fn viewing_preferences(
175        mut self,
176        value: crate::datadogV1::model::ViewingPreferences,
177    ) -> Self {
178        self.viewing_preferences = Some(value);
179        self
180    }
181
182    pub fn additional_properties(
183        mut self,
184        value: std::collections::BTreeMap<String, serde_json::Value>,
185    ) -> Self {
186        self.additional_properties = value;
187        self
188    }
189}
190
191impl Default for SharedDashboardUpdateRequest {
192    fn default() -> Self {
193        Self::new()
194    }
195}
196
197impl<'de> Deserialize<'de> for SharedDashboardUpdateRequest {
198    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
199    where
200        D: Deserializer<'de>,
201    {
202        struct SharedDashboardUpdateRequestVisitor;
203        impl<'a> Visitor<'a> for SharedDashboardUpdateRequestVisitor {
204            type Value = SharedDashboardUpdateRequest;
205
206            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
207                f.write_str("a mapping")
208            }
209
210            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
211            where
212                M: MapAccess<'a>,
213            {
214                let mut embeddable_domains: Option<Vec<String>> = None;
215                let mut expiration: Option<Option<chrono::DateTime<chrono::Utc>>> = None;
216                let mut global_time: Option<
217                    Option<crate::datadogV1::model::SharedDashboardUpdateRequestGlobalTime>,
218                > = None;
219                let mut global_time_selectable_enabled: Option<Option<bool>> = None;
220                let mut invitees: Option<
221                    Vec<crate::datadogV1::model::SharedDashboardInviteesItems>,
222                > = None;
223                let mut selectable_template_vars: Option<
224                    Option<Vec<crate::datadogV1::model::SelectableTemplateVariableItems>>,
225                > = None;
226                let mut share_list: Option<Option<Vec<String>>> = None;
227                let mut share_type: Option<Option<crate::datadogV1::model::DashboardShareType>> =
228                    None;
229                let mut status: Option<crate::datadogV1::model::SharedDashboardStatus> = None;
230                let mut title: Option<String> = None;
231                let mut viewing_preferences: Option<crate::datadogV1::model::ViewingPreferences> =
232                    None;
233                let mut additional_properties: std::collections::BTreeMap<
234                    String,
235                    serde_json::Value,
236                > = std::collections::BTreeMap::new();
237                let mut _unparsed = false;
238
239                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
240                    match k.as_str() {
241                        "embeddable_domains" => {
242                            if v.is_null() {
243                                continue;
244                            }
245                            embeddable_domains =
246                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
247                        }
248                        "expiration" => {
249                            expiration = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
250                        }
251                        "global_time" => {
252                            global_time =
253                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
254                        }
255                        "global_time_selectable_enabled" => {
256                            global_time_selectable_enabled =
257                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
258                        }
259                        "invitees" => {
260                            if v.is_null() {
261                                continue;
262                            }
263                            invitees = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
264                        }
265                        "selectable_template_vars" => {
266                            selectable_template_vars =
267                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
268                        }
269                        "share_list" => {
270                            share_list = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
271                        }
272                        "share_type" => {
273                            share_type = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
274                            if let Some(ref _share_type) = share_type {
275                                match _share_type {
276                                    Some(
277                                        crate::datadogV1::model::DashboardShareType::UnparsedObject(
278                                            _share_type,
279                                        ),
280                                    ) => {
281                                        _unparsed = true;
282                                    }
283                                    _ => {}
284                                }
285                            }
286                        }
287                        "status" => {
288                            if v.is_null() {
289                                continue;
290                            }
291                            status = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
292                            if let Some(ref _status) = status {
293                                match _status {
294                                    crate::datadogV1::model::SharedDashboardStatus::UnparsedObject(_status) => {
295                                        _unparsed = true;
296                                    },
297                                    _ => {}
298                                }
299                            }
300                        }
301                        "title" => {
302                            if v.is_null() {
303                                continue;
304                            }
305                            title = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
306                        }
307                        "viewing_preferences" => {
308                            if v.is_null() {
309                                continue;
310                            }
311                            viewing_preferences =
312                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
313                        }
314                        &_ => {
315                            if let Ok(value) = serde_json::from_value(v.clone()) {
316                                additional_properties.insert(k, value);
317                            }
318                        }
319                    }
320                }
321
322                #[allow(deprecated)]
323                let content = SharedDashboardUpdateRequest {
324                    embeddable_domains,
325                    expiration,
326                    global_time,
327                    global_time_selectable_enabled,
328                    invitees,
329                    selectable_template_vars,
330                    share_list,
331                    share_type,
332                    status,
333                    title,
334                    viewing_preferences,
335                    additional_properties,
336                    _unparsed,
337                };
338
339                Ok(content)
340            }
341        }
342
343        deserializer.deserialize_any(SharedDashboardUpdateRequestVisitor)
344    }
345}