datadog_api_client/datadogV2/model/
model_sca_request_data_attributes.rs

1// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2// This product includes software developed at Datadog (https://www.datadoghq.com/).
3// Copyright 2019-Present Datadog, Inc.
4use 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}