datadog_api_client/datadogV2/model/
model_observability_pipeline_reduce_processor.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]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct ObservabilityPipelineReduceProcessor {
14 #[serde(rename = "group_by")]
16 pub group_by: Vec<String>,
17 #[serde(rename = "id")]
19 pub id: String,
20 #[serde(rename = "include")]
22 pub include: String,
23 #[serde(rename = "inputs")]
25 pub inputs: Vec<String>,
26 #[serde(rename = "merge_strategies")]
28 pub merge_strategies:
29 Vec<crate::datadogV2::model::ObservabilityPipelineReduceProcessorMergeStrategy>,
30 #[serde(rename = "type")]
32 pub type_: crate::datadogV2::model::ObservabilityPipelineReduceProcessorType,
33 #[serde(flatten)]
34 pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
35 #[serde(skip)]
36 #[serde(default)]
37 pub(crate) _unparsed: bool,
38}
39
40impl ObservabilityPipelineReduceProcessor {
41 pub fn new(
42 group_by: Vec<String>,
43 id: String,
44 include: String,
45 inputs: Vec<String>,
46 merge_strategies: Vec<
47 crate::datadogV2::model::ObservabilityPipelineReduceProcessorMergeStrategy,
48 >,
49 type_: crate::datadogV2::model::ObservabilityPipelineReduceProcessorType,
50 ) -> ObservabilityPipelineReduceProcessor {
51 ObservabilityPipelineReduceProcessor {
52 group_by,
53 id,
54 include,
55 inputs,
56 merge_strategies,
57 type_,
58 additional_properties: std::collections::BTreeMap::new(),
59 _unparsed: false,
60 }
61 }
62
63 pub fn additional_properties(
64 mut self,
65 value: std::collections::BTreeMap<String, serde_json::Value>,
66 ) -> Self {
67 self.additional_properties = value;
68 self
69 }
70}
71
72impl<'de> Deserialize<'de> for ObservabilityPipelineReduceProcessor {
73 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
74 where
75 D: Deserializer<'de>,
76 {
77 struct ObservabilityPipelineReduceProcessorVisitor;
78 impl<'a> Visitor<'a> for ObservabilityPipelineReduceProcessorVisitor {
79 type Value = ObservabilityPipelineReduceProcessor;
80
81 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
82 f.write_str("a mapping")
83 }
84
85 fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
86 where
87 M: MapAccess<'a>,
88 {
89 let mut group_by: Option<Vec<String>> = None;
90 let mut id: Option<String> = None;
91 let mut include: Option<String> = None;
92 let mut inputs: Option<Vec<String>> = None;
93 let mut merge_strategies: Option<
94 Vec<crate::datadogV2::model::ObservabilityPipelineReduceProcessorMergeStrategy>,
95 > = None;
96 let mut type_: Option<
97 crate::datadogV2::model::ObservabilityPipelineReduceProcessorType,
98 > = None;
99 let mut additional_properties: std::collections::BTreeMap<
100 String,
101 serde_json::Value,
102 > = std::collections::BTreeMap::new();
103 let mut _unparsed = false;
104
105 while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
106 match k.as_str() {
107 "group_by" => {
108 group_by = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
109 }
110 "id" => {
111 id = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
112 }
113 "include" => {
114 include = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
115 }
116 "inputs" => {
117 inputs = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
118 }
119 "merge_strategies" => {
120 merge_strategies =
121 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
122 }
123 "type" => {
124 type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
125 if let Some(ref _type_) = type_ {
126 match _type_ {
127 crate::datadogV2::model::ObservabilityPipelineReduceProcessorType::UnparsedObject(_type_) => {
128 _unparsed = true;
129 },
130 _ => {}
131 }
132 }
133 }
134 &_ => {
135 if let Ok(value) = serde_json::from_value(v.clone()) {
136 additional_properties.insert(k, value);
137 }
138 }
139 }
140 }
141 let group_by = group_by.ok_or_else(|| M::Error::missing_field("group_by"))?;
142 let id = id.ok_or_else(|| M::Error::missing_field("id"))?;
143 let include = include.ok_or_else(|| M::Error::missing_field("include"))?;
144 let inputs = inputs.ok_or_else(|| M::Error::missing_field("inputs"))?;
145 let merge_strategies =
146 merge_strategies.ok_or_else(|| M::Error::missing_field("merge_strategies"))?;
147 let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
148
149 let content = ObservabilityPipelineReduceProcessor {
150 group_by,
151 id,
152 include,
153 inputs,
154 merge_strategies,
155 type_,
156 additional_properties,
157 _unparsed,
158 };
159
160 Ok(content)
161 }
162 }
163
164 deserializer.deserialize_any(ObservabilityPipelineReduceProcessorVisitor)
165 }
166}