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_: String,
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_: String,
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<String> = 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 }
93 &_ => {
94 if let Ok(value) = serde_json::from_value(v.clone()) {
95 additional_properties.insert(k, value);
96 }
97 }
98 }
99 }
100 let attributes = attributes.ok_or_else(|| M::Error::missing_field("attributes"))?;
101 let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
102
103 let content = DatasetRequest {
104 attributes,
105 type_,
106 additional_properties,
107 _unparsed,
108 };
109
110 Ok(content)
111 }
112 }
113
114 deserializer.deserialize_any(DatasetRequestVisitor)
115 }
116}