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