Skip to content

Commit 8c41ab1

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add support for vulnerability management - Add ListScannedAssetsMetadata new endpoint and update existing ones (#961)
Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent d72ecc2 commit 8c41ab1

25 files changed

+1967
-346
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 461 additions & 210 deletions
Large diffs are not rendered by default.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// List scanned assets metadata returns "OK" response
2+
use datadog_api_client::datadog;
3+
use datadog_api_client::datadogV2::api_security_monitoring::ListScannedAssetsMetadataOptionalParams;
4+
use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
5+
6+
#[tokio::main]
7+
async fn main() {
8+
let mut configuration = datadog::Configuration::new();
9+
configuration.set_unstable_operation_enabled("v2.ListScannedAssetsMetadata", true);
10+
let api = SecurityMonitoringAPI::with_config(configuration);
11+
let resp = api
12+
.list_scanned_assets_metadata(ListScannedAssetsMetadataOptionalParams::default())
13+
.await;
14+
if let Ok(value) = resp {
15+
println!("{:#?}", value);
16+
} else {
17+
println!("{:#?}", resp.unwrap_err());
18+
}
19+
}

src/datadog/configuration.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ impl Default for Configuration {
142142
("v2.list_assets_sbo_ms".to_owned(), false),
143143
("v2.list_findings".to_owned(), false),
144144
("v2.list_historical_jobs".to_owned(), false),
145+
("v2.list_scanned_assets_metadata".to_owned(), false),
145146
("v2.list_security_monitoring_histsignals".to_owned(), false),
146147
("v2.list_vulnerabilities".to_owned(), false),
147148
("v2.list_vulnerable_assets".to_owned(), false),

src/datadogV2/api/api_security_monitoring.rs

Lines changed: 336 additions & 6 deletions
Large diffs are not rendered by default.

src/datadogV2/model/mod.rs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5182,24 +5182,6 @@ pub mod model_update_rule_response_data;
51825182
pub use self::model_update_rule_response_data::UpdateRuleResponseData;
51835183
pub mod model_asset_type;
51845184
pub use self::model_asset_type::AssetType;
5185-
pub mod model_list_vulnerable_assets_response;
5186-
pub use self::model_list_vulnerable_assets_response::ListVulnerableAssetsResponse;
5187-
pub mod model_asset;
5188-
pub use self::model_asset::Asset;
5189-
pub mod model_asset_attributes;
5190-
pub use self::model_asset_attributes::AssetAttributes;
5191-
pub mod model_asset_operating_system;
5192-
pub use self::model_asset_operating_system::AssetOperatingSystem;
5193-
pub mod model_asset_risks;
5194-
pub use self::model_asset_risks::AssetRisks;
5195-
pub mod model_asset_version;
5196-
pub use self::model_asset_version::AssetVersion;
5197-
pub mod model_asset_entity_type;
5198-
pub use self::model_asset_entity_type::AssetEntityType;
5199-
pub mod model_links;
5200-
pub use self::model_links::Links;
5201-
pub mod model_metadata;
5202-
pub use self::model_metadata::Metadata;
52035185
pub mod model_sbom_component_license_type;
52045186
pub use self::model_sbom_component_license_type::SBOMComponentLicenseType;
52055187
pub mod model_list_assets_sbo_ms_response;
@@ -5232,8 +5214,26 @@ pub mod model_spec_version;
52325214
pub use self::model_spec_version::SpecVersion;
52335215
pub mod model_sbom_type;
52345216
pub use self::model_sbom_type::SBOMType;
5217+
pub mod model_links;
5218+
pub use self::model_links::Links;
5219+
pub mod model_metadata;
5220+
pub use self::model_metadata::Metadata;
5221+
pub mod model_sbom_format;
5222+
pub use self::model_sbom_format::SBOMFormat;
52355223
pub mod model_get_sbom_response;
52365224
pub use self::model_get_sbom_response::GetSBOMResponse;
5225+
pub mod model_cloud_asset_type;
5226+
pub use self::model_cloud_asset_type::CloudAssetType;
5227+
pub mod model_scanned_assets_metadata;
5228+
pub use self::model_scanned_assets_metadata::ScannedAssetsMetadata;
5229+
pub mod model_scanned_asset_metadata;
5230+
pub use self::model_scanned_asset_metadata::ScannedAssetMetadata;
5231+
pub mod model_scanned_asset_metadata_attributes;
5232+
pub use self::model_scanned_asset_metadata_attributes::ScannedAssetMetadataAttributes;
5233+
pub mod model_scanned_asset_metadata_asset;
5234+
pub use self::model_scanned_asset_metadata_asset::ScannedAssetMetadataAsset;
5235+
pub mod model_scanned_asset_metadata_last_success;
5236+
pub use self::model_scanned_asset_metadata_last_success::ScannedAssetMetadataLastSuccess;
52375237
pub mod model_create_notification_rule_parameters;
52385238
pub use self::model_create_notification_rule_parameters::CreateNotificationRuleParameters;
52395239
pub mod model_create_notification_rule_parameters_data;
@@ -5280,6 +5280,8 @@ pub mod model_vulnerability;
52805280
pub use self::model_vulnerability::Vulnerability;
52815281
pub mod model_vulnerability_attributes;
52825282
pub use self::model_vulnerability_attributes::VulnerabilityAttributes;
5283+
pub mod model_vulnerability_advisory;
5284+
pub use self::model_vulnerability_advisory::VulnerabilityAdvisory;
52835285
pub mod model_code_location;
52845286
pub use self::model_code_location::CodeLocation;
52855287
pub mod model_vulnerability_cvss;
@@ -5306,8 +5308,22 @@ pub mod model_vulnerability_relationships_affects;
53065308
pub use self::model_vulnerability_relationships_affects::VulnerabilityRelationshipsAffects;
53075309
pub mod model_vulnerability_relationships_affects_data;
53085310
pub use self::model_vulnerability_relationships_affects_data::VulnerabilityRelationshipsAffectsData;
5311+
pub mod model_asset_entity_type;
5312+
pub use self::model_asset_entity_type::AssetEntityType;
53095313
pub mod model_vulnerabilities_type;
53105314
pub use self::model_vulnerabilities_type::VulnerabilitiesType;
5315+
pub mod model_list_vulnerable_assets_response;
5316+
pub use self::model_list_vulnerable_assets_response::ListVulnerableAssetsResponse;
5317+
pub mod model_asset;
5318+
pub use self::model_asset::Asset;
5319+
pub mod model_asset_attributes;
5320+
pub use self::model_asset_attributes::AssetAttributes;
5321+
pub mod model_asset_operating_system;
5322+
pub use self::model_asset_operating_system::AssetOperatingSystem;
5323+
pub mod model_asset_risks;
5324+
pub use self::model_asset_risks::AssetRisks;
5325+
pub mod model_asset_version;
5326+
pub use self::model_asset_version::AssetVersion;
53115327
pub mod model_security_filters_response;
53125328
pub use self::model_security_filters_response::SecurityFiltersResponse;
53135329
pub mod model_security_filter;
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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.
4+
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
6+
7+
#[non_exhaustive]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
9+
pub enum CloudAssetType {
10+
HOST,
11+
HOST_IMAGE,
12+
IMAGE,
13+
UnparsedObject(crate::datadog::UnparsedObject),
14+
}
15+
16+
impl ToString for CloudAssetType {
17+
fn to_string(&self) -> String {
18+
match self {
19+
Self::HOST => String::from("Host"),
20+
Self::HOST_IMAGE => String::from("HostImage"),
21+
Self::IMAGE => String::from("Image"),
22+
Self::UnparsedObject(v) => v.value.to_string(),
23+
}
24+
}
25+
}
26+
27+
impl Serialize for CloudAssetType {
28+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
29+
where
30+
S: Serializer,
31+
{
32+
match self {
33+
Self::UnparsedObject(v) => v.serialize(serializer),
34+
_ => serializer.serialize_str(self.to_string().as_str()),
35+
}
36+
}
37+
}
38+
39+
impl<'de> Deserialize<'de> for CloudAssetType {
40+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
41+
where
42+
D: Deserializer<'de>,
43+
{
44+
let s: String = String::deserialize(deserializer)?;
45+
Ok(match s.as_str() {
46+
"Host" => Self::HOST,
47+
"HostImage" => Self::HOST_IMAGE,
48+
"Image" => Self::IMAGE,
49+
_ => Self::UnparsedObject(crate::datadog::UnparsedObject {
50+
value: serde_json::Value::String(s.into()),
51+
}),
52+
})
53+
}
54+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.
4+
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
6+
7+
#[non_exhaustive]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
9+
pub enum SBOMFormat {
10+
CYCLONEDX,
11+
SPDX,
12+
UnparsedObject(crate::datadog::UnparsedObject),
13+
}
14+
15+
impl ToString for SBOMFormat {
16+
fn to_string(&self) -> String {
17+
match self {
18+
Self::CYCLONEDX => String::from("CycloneDX"),
19+
Self::SPDX => String::from("SPDX"),
20+
Self::UnparsedObject(v) => v.value.to_string(),
21+
}
22+
}
23+
}
24+
25+
impl Serialize for SBOMFormat {
26+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
27+
where
28+
S: Serializer,
29+
{
30+
match self {
31+
Self::UnparsedObject(v) => v.serialize(serializer),
32+
_ => serializer.serialize_str(self.to_string().as_str()),
33+
}
34+
}
35+
}
36+
37+
impl<'de> Deserialize<'de> for SBOMFormat {
38+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
39+
where
40+
D: Deserializer<'de>,
41+
{
42+
let s: String = String::deserialize(deserializer)?;
43+
Ok(match s.as_str() {
44+
"CycloneDX" => Self::CYCLONEDX,
45+
"SPDX" => Self::SPDX,
46+
_ => Self::UnparsedObject(crate::datadog::UnparsedObject {
47+
value: serde_json::Value::String(s.into()),
48+
}),
49+
})
50+
}
51+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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.
4+
use serde::de::{Error, MapAccess, Visitor};
5+
use serde::{Deserialize, Deserializer, Serialize};
6+
use serde_with::skip_serializing_none;
7+
use std::fmt::{self, Formatter};
8+
9+
/// The metadata of a scanned asset.
10+
#[non_exhaustive]
11+
#[skip_serializing_none]
12+
#[derive(Clone, Debug, PartialEq, Serialize)]
13+
pub struct ScannedAssetMetadata {
14+
/// The attributes of a scanned asset metadata.
15+
#[serde(rename = "attributes")]
16+
pub attributes: crate::datadogV2::model::ScannedAssetMetadataAttributes,
17+
/// The ID of the scanned asset metadata.
18+
#[serde(rename = "id")]
19+
pub id: String,
20+
#[serde(flatten)]
21+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
22+
#[serde(skip)]
23+
#[serde(default)]
24+
pub(crate) _unparsed: bool,
25+
}
26+
27+
impl ScannedAssetMetadata {
28+
pub fn new(
29+
attributes: crate::datadogV2::model::ScannedAssetMetadataAttributes,
30+
id: String,
31+
) -> ScannedAssetMetadata {
32+
ScannedAssetMetadata {
33+
attributes,
34+
id,
35+
additional_properties: std::collections::BTreeMap::new(),
36+
_unparsed: false,
37+
}
38+
}
39+
40+
pub fn additional_properties(
41+
mut self,
42+
value: std::collections::BTreeMap<String, serde_json::Value>,
43+
) -> Self {
44+
self.additional_properties = value;
45+
self
46+
}
47+
}
48+
49+
impl<'de> Deserialize<'de> for ScannedAssetMetadata {
50+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
51+
where
52+
D: Deserializer<'de>,
53+
{
54+
struct ScannedAssetMetadataVisitor;
55+
impl<'a> Visitor<'a> for ScannedAssetMetadataVisitor {
56+
type Value = ScannedAssetMetadata;
57+
58+
fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
59+
f.write_str("a mapping")
60+
}
61+
62+
fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
63+
where
64+
M: MapAccess<'a>,
65+
{
66+
let mut attributes: Option<
67+
crate::datadogV2::model::ScannedAssetMetadataAttributes,
68+
> = None;
69+
let mut id: Option<String> = None;
70+
let mut additional_properties: std::collections::BTreeMap<
71+
String,
72+
serde_json::Value,
73+
> = std::collections::BTreeMap::new();
74+
let mut _unparsed = false;
75+
76+
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
77+
match k.as_str() {
78+
"attributes" => {
79+
attributes = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
80+
}
81+
"id" => {
82+
id = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
83+
}
84+
&_ => {
85+
if let Ok(value) = serde_json::from_value(v.clone()) {
86+
additional_properties.insert(k, value);
87+
}
88+
}
89+
}
90+
}
91+
let attributes = attributes.ok_or_else(|| M::Error::missing_field("attributes"))?;
92+
let id = id.ok_or_else(|| M::Error::missing_field("id"))?;
93+
94+
let content = ScannedAssetMetadata {
95+
attributes,
96+
id,
97+
additional_properties,
98+
_unparsed,
99+
};
100+
101+
Ok(content)
102+
}
103+
}
104+
105+
deserializer.deserialize_any(ScannedAssetMetadataVisitor)
106+
}
107+
}

0 commit comments

Comments
 (0)