datadog_api_client/datadogV2/model/
model_sca_request_data_attributes.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]
10#[skip_serializing_none]
11#[derive(Clone, Debug, PartialEq, Serialize)]
12pub struct ScaRequestDataAttributes {
13 #[serde(rename = "commit")]
14 pub commit: Option<crate::datadogV2::model::ScaRequestDataAttributesCommit>,
15 #[serde(rename = "dependencies")]
16 pub dependencies:
17 Option<Vec<crate::datadogV2::model::ScaRequestDataAttributesDependenciesItems>>,
18 #[serde(rename = "env")]
19 pub env: Option<String>,
20 #[serde(rename = "files")]
21 pub files: Option<Vec<crate::datadogV2::model::ScaRequestDataAttributesFilesItems>>,
22 #[serde(rename = "relations")]
23 pub relations: Option<Vec<crate::datadogV2::model::ScaRequestDataAttributesRelationsItems>>,
24 #[serde(rename = "repository")]
25 pub repository: Option<crate::datadogV2::model::ScaRequestDataAttributesRepository>,
26 #[serde(rename = "service")]
27 pub service: Option<String>,
28 #[serde(rename = "tags")]
29 pub tags: Option<std::collections::BTreeMap<String, String>>,
30 #[serde(rename = "vulnerabilities")]
31 pub vulnerabilities:
32 Option<Vec<crate::datadogV2::model::ScaRequestDataAttributesVulnerabilitiesItems>>,
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 ScaRequestDataAttributes {
41 pub fn new() -> ScaRequestDataAttributes {
42 ScaRequestDataAttributes {
43 commit: None,
44 dependencies: None,
45 env: None,
46 files: None,
47 relations: None,
48 repository: None,
49 service: None,
50 tags: None,
51 vulnerabilities: None,
52 additional_properties: std::collections::BTreeMap::new(),
53 _unparsed: false,
54 }
55 }
56
57 pub fn commit(
58 mut self,
59 value: crate::datadogV2::model::ScaRequestDataAttributesCommit,
60 ) -> Self {
61 self.commit = Some(value);
62 self
63 }
64
65 pub fn dependencies(
66 mut self,
67 value: Vec<crate::datadogV2::model::ScaRequestDataAttributesDependenciesItems>,
68 ) -> Self {
69 self.dependencies = Some(value);
70 self
71 }
72
73 pub fn env(mut self, value: String) -> Self {
74 self.env = Some(value);
75 self
76 }
77
78 pub fn files(
79 mut self,
80 value: Vec<crate::datadogV2::model::ScaRequestDataAttributesFilesItems>,
81 ) -> Self {
82 self.files = Some(value);
83 self
84 }
85
86 pub fn relations(
87 mut self,
88 value: Vec<crate::datadogV2::model::ScaRequestDataAttributesRelationsItems>,
89 ) -> Self {
90 self.relations = Some(value);
91 self
92 }
93
94 pub fn repository(
95 mut self,
96 value: crate::datadogV2::model::ScaRequestDataAttributesRepository,
97 ) -> Self {
98 self.repository = Some(value);
99 self
100 }
101
102 pub fn service(mut self, value: String) -> Self {
103 self.service = Some(value);
104 self
105 }
106
107 pub fn tags(mut self, value: std::collections::BTreeMap<String, String>) -> Self {
108 self.tags = Some(value);
109 self
110 }
111
112 pub fn vulnerabilities(
113 mut self,
114 value: Vec<crate::datadogV2::model::ScaRequestDataAttributesVulnerabilitiesItems>,
115 ) -> Self {
116 self.vulnerabilities = Some(value);
117 self
118 }
119
120 pub fn additional_properties(
121 mut self,
122 value: std::collections::BTreeMap<String, serde_json::Value>,
123 ) -> Self {
124 self.additional_properties = value;
125 self
126 }
127}
128
129impl Default for ScaRequestDataAttributes {
130 fn default() -> Self {
131 Self::new()
132 }
133}
134
135impl<'de> Deserialize<'de> for ScaRequestDataAttributes {
136 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
137 where
138 D: Deserializer<'de>,
139 {
140 struct ScaRequestDataAttributesVisitor;
141 impl<'a> Visitor<'a> for ScaRequestDataAttributesVisitor {
142 type Value = ScaRequestDataAttributes;
143
144 fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
145 f.write_str("a mapping")
146 }
147
148 fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
149 where
150 M: MapAccess<'a>,
151 {
152 let mut commit: Option<crate::datadogV2::model::ScaRequestDataAttributesCommit> =
153 None;
154 let mut dependencies: Option<
155 Vec<crate::datadogV2::model::ScaRequestDataAttributesDependenciesItems>,
156 > = None;
157 let mut env: Option<String> = None;
158 let mut files: Option<
159 Vec<crate::datadogV2::model::ScaRequestDataAttributesFilesItems>,
160 > = None;
161 let mut relations: Option<
162 Vec<crate::datadogV2::model::ScaRequestDataAttributesRelationsItems>,
163 > = None;
164 let mut repository: Option<
165 crate::datadogV2::model::ScaRequestDataAttributesRepository,
166 > = None;
167 let mut service: Option<String> = None;
168 let mut tags: Option<std::collections::BTreeMap<String, String>> = None;
169 let mut vulnerabilities: Option<
170 Vec<crate::datadogV2::model::ScaRequestDataAttributesVulnerabilitiesItems>,
171 > = None;
172 let mut additional_properties: std::collections::BTreeMap<
173 String,
174 serde_json::Value,
175 > = std::collections::BTreeMap::new();
176 let mut _unparsed = false;
177
178 while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
179 match k.as_str() {
180 "commit" => {
181 if v.is_null() {
182 continue;
183 }
184 commit = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
185 }
186 "dependencies" => {
187 if v.is_null() {
188 continue;
189 }
190 dependencies =
191 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
192 }
193 "env" => {
194 if v.is_null() {
195 continue;
196 }
197 env = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
198 }
199 "files" => {
200 if v.is_null() {
201 continue;
202 }
203 files = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
204 }
205 "relations" => {
206 if v.is_null() {
207 continue;
208 }
209 relations = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
210 }
211 "repository" => {
212 if v.is_null() {
213 continue;
214 }
215 repository = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
216 }
217 "service" => {
218 if v.is_null() {
219 continue;
220 }
221 service = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
222 }
223 "tags" => {
224 if v.is_null() {
225 continue;
226 }
227 tags = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
228 }
229 "vulnerabilities" => {
230 if v.is_null() {
231 continue;
232 }
233 vulnerabilities =
234 Some(serde_json::from_value(v).map_err(M::Error::custom)?);
235 }
236 &_ => {
237 if let Ok(value) = serde_json::from_value(v.clone()) {
238 additional_properties.insert(k, value);
239 }
240 }
241 }
242 }
243
244 let content = ScaRequestDataAttributes {
245 commit,
246 dependencies,
247 env,
248 files,
249 relations,
250 repository,
251 service,
252 tags,
253 vulnerabilities,
254 additional_properties,
255 _unparsed,
256 };
257
258 Ok(content)
259 }
260 }
261
262 deserializer.deserialize_any(ScaRequestDataAttributesVisitor)
263 }
264}