datadog_api_client/datadogV1/model/
model_split_graph_source_widget_definition.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::{Deserialize, Deserializer, Serialize};
5
6/// The original widget we are splitting on.
7#[non_exhaustive]
8#[derive(Clone, Debug, PartialEq, Serialize)]
9#[serde(untagged)]
10pub enum SplitGraphSourceWidgetDefinition {
11    ChangeWidgetDefinition(Box<crate::datadogV1::model::ChangeWidgetDefinition>),
12    GeomapWidgetDefinition(Box<crate::datadogV1::model::GeomapWidgetDefinition>),
13    QueryValueWidgetDefinition(Box<crate::datadogV1::model::QueryValueWidgetDefinition>),
14    ScatterPlotWidgetDefinition(Box<crate::datadogV1::model::ScatterPlotWidgetDefinition>),
15    SunburstWidgetDefinition(Box<crate::datadogV1::model::SunburstWidgetDefinition>),
16    TableWidgetDefinition(Box<crate::datadogV1::model::TableWidgetDefinition>),
17    TimeseriesWidgetDefinition(Box<crate::datadogV1::model::TimeseriesWidgetDefinition>),
18    ToplistWidgetDefinition(Box<crate::datadogV1::model::ToplistWidgetDefinition>),
19    TreeMapWidgetDefinition(Box<crate::datadogV1::model::TreeMapWidgetDefinition>),
20    UnparsedObject(crate::datadog::UnparsedObject),
21}
22
23impl<'de> Deserialize<'de> for SplitGraphSourceWidgetDefinition {
24    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
25    where
26        D: Deserializer<'de>,
27    {
28        let value: serde_json::Value = Deserialize::deserialize(deserializer)?;
29        if let Ok(_v) = serde_json::from_value::<Box<crate::datadogV1::model::ChangeWidgetDefinition>>(
30            value.clone(),
31        ) {
32            if !_v._unparsed {
33                return Ok(SplitGraphSourceWidgetDefinition::ChangeWidgetDefinition(_v));
34            }
35        }
36        if let Ok(_v) = serde_json::from_value::<Box<crate::datadogV1::model::GeomapWidgetDefinition>>(
37            value.clone(),
38        ) {
39            if !_v._unparsed {
40                return Ok(SplitGraphSourceWidgetDefinition::GeomapWidgetDefinition(_v));
41            }
42        }
43        if let Ok(_v) = serde_json::from_value::<
44            Box<crate::datadogV1::model::QueryValueWidgetDefinition>,
45        >(value.clone())
46        {
47            if !_v._unparsed {
48                return Ok(SplitGraphSourceWidgetDefinition::QueryValueWidgetDefinition(_v));
49            }
50        }
51        if let Ok(_v) = serde_json::from_value::<
52            Box<crate::datadogV1::model::ScatterPlotWidgetDefinition>,
53        >(value.clone())
54        {
55            if !_v._unparsed {
56                return Ok(SplitGraphSourceWidgetDefinition::ScatterPlotWidgetDefinition(_v));
57            }
58        }
59        if let Ok(_v) = serde_json::from_value::<
60            Box<crate::datadogV1::model::SunburstWidgetDefinition>,
61        >(value.clone())
62        {
63            if !_v._unparsed {
64                return Ok(SplitGraphSourceWidgetDefinition::SunburstWidgetDefinition(
65                    _v,
66                ));
67            }
68        }
69        if let Ok(_v) = serde_json::from_value::<Box<crate::datadogV1::model::TableWidgetDefinition>>(
70            value.clone(),
71        ) {
72            if !_v._unparsed {
73                return Ok(SplitGraphSourceWidgetDefinition::TableWidgetDefinition(_v));
74            }
75        }
76        if let Ok(_v) = serde_json::from_value::<
77            Box<crate::datadogV1::model::TimeseriesWidgetDefinition>,
78        >(value.clone())
79        {
80            if !_v._unparsed {
81                return Ok(SplitGraphSourceWidgetDefinition::TimeseriesWidgetDefinition(_v));
82            }
83        }
84        if let Ok(_v) = serde_json::from_value::<
85            Box<crate::datadogV1::model::ToplistWidgetDefinition>,
86        >(value.clone())
87        {
88            if !_v._unparsed {
89                return Ok(SplitGraphSourceWidgetDefinition::ToplistWidgetDefinition(
90                    _v,
91                ));
92            }
93        }
94        if let Ok(_v) = serde_json::from_value::<
95            Box<crate::datadogV1::model::TreeMapWidgetDefinition>,
96        >(value.clone())
97        {
98            if !_v._unparsed {
99                return Ok(SplitGraphSourceWidgetDefinition::TreeMapWidgetDefinition(
100                    _v,
101                ));
102            }
103        }
104
105        return Ok(SplitGraphSourceWidgetDefinition::UnparsedObject(
106            crate::datadog::UnparsedObject { value },
107        ));
108    }
109}