datadog_api_client/datadogV2/model/
model_dataset_request.rs1use serde::de::{Error, MapAccess, Visitor};
5use serde::{Deserialize, Deserializer, Serialize};
6use serde_with::skip_serializing_none;
7use std::fmt::{self, Formatter};
8
9#[non_exhaustive]
21#[skip_serializing_none]
22#[derive(Clone, Debug, PartialEq, Serialize)]
23pub struct DatasetRequest {
24 #[serde(rename = "attributes")]
26 pub attributes: crate::datadogV2::model::DatasetAttributesRequest,
27 #[serde(rename = "type")]
29 pub type_: crate::datadogV2::model::DatasetType,
30 #[serde(flatten)]
31 pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
32 #[serde(skip)]
33 #[serde(default)]
34 pub(crate) _unparsed: bool,
35}
36
37impl DatasetRequest {
38 pub fn new(
39 attributes: crate::datadogV2::model::DatasetAttributesRequest,
40 type_: crate::datadogV2::model::DatasetType,
41 ) -> DatasetRequest {
42 DatasetRequest {
43 attributes,
44 type_,
45 additional_properties: std::collections::BTreeMap::new(),
46 _unparsed: false,
47 }
48 }
49
50 pub fn additional_properties(
51 mut self,
52 value: std::collections::BTreeMap<String, serde_json::Value>,
53 ) -> Self {
54 self.additional_properties = value;
55 self
56 }
57}
58
59impl<'de> Deserialize<'de> for DatasetRequest {
60 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
61 where
62 D: Deserializer<'de>,
63 {
64 struct DatasetRequestVisitor;
65 impl<'a> Visitor<'a> for DatasetRequestVisitor {
66 type Value = DatasetRequest;
67
68 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
69 f.write_str("a mapping")
70 }
71
72 fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
73 where
74 M: MapAccess<'a>,
75 {
76 let mut attributes: Option<crate::datadogV2::model::DatasetAttributesRequest> =
77 None;
78 let mut type_: Option<crate::datadogV2::model::DatasetType> = None;
79 let mut additional_properties: std::collections::BTreeMap<
80 String,
81 serde_json::Value,
82 > = std::collections::BTreeMap::new();
83 let mut _unparsed = false;
84
85 while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
86 match k.as_str() {
87 "attributes" => {
88 attributes = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
89 }
90 "type" => {
91 type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
92 if let Some(ref _type_) = type_ {
93 match _type_ {
94 crate::datadogV2::model::DatasetType::UnparsedObject(
95 _type_,
96 ) => {
97 _unparsed = true;
98 }
99 _ => {}
100 }
101 }
102 }
103 &_ => {
104 if let Ok(value) = serde_json::from_value(v.clone()) {
105 additional_properties.insert(k, value);
106 }
107 }
108 }
109 }
110 let attributes = attributes.ok_or_else(|| M::Error::missing_field("attributes"))?;
111 let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
112
113 let content = DatasetRequest {
114 attributes,
115 type_,
116 additional_properties,
117 _unparsed,
118 };
119
120 Ok(content)
121 }
122 }
123
124 deserializer.deserialize_any(DatasetRequestVisitor)
125 }
126}