diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 050808b8c..a99a91edd 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -14407,7 +14407,7 @@ components: key: cost_center value: engineering case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: account_id:"123456789" AND service:"web-api" reference_table: null id: New Ruleset @@ -14452,7 +14452,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/CreateRulesetRequestDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -14467,31 +14467,6 @@ components: - enabled - name type: object - CreateRulesetRequestDataAttributesRulesItemsMapping: - description: The definition of `CreateRulesetRequestDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object CreateRulesetRequestDataAttributesRulesItemsQuery: description: The definition of `CreateRulesetRequestDataAttributesRulesItemsQuery` object. @@ -14503,16 +14478,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object CreateRulesetRequestDataAttributesRulesItemsQueryAddition: @@ -14546,8 +14522,12 @@ components: $ref: '#/components/schemas/CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: @@ -18252,6 +18232,42 @@ components: - INTEGRATION_SCREENBOARD - INTEGRATION_TIMEBOARD - HOST_TIMEBOARD + DataAttributesRulesItemsIfTagExists: + description: The behavior when the tag already exists. + enum: + - append + - do_not_apply + - replace + type: string + x-enum-varnames: + - APPEND + - DO_NOT_APPLY + - REPLACE + DataAttributesRulesItemsMapping: + description: The definition of `DataAttributesRulesItemsMapping` object. + nullable: true + properties: + destination_key: + description: The `mapping` `destination_key`. + example: '' + type: string + if_not_exists: + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `mapping` `if_not_exists`. + type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' + source_keys: + description: The `mapping` `source_keys`. + example: + - '' + items: + type: string + type: array + required: + - destination_key + - source_keys + type: object DataDeletionResponseItem: description: The created data deletion request information. properties: @@ -49786,13 +49802,13 @@ components: key: abc value: ww case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: billingcurrency:"USD" AND account_name:"SZA96462" AND billingcurrency:"USD" reference_table: null - enabled: true mapping: destination_key: h - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - accountname - accountownerid @@ -49812,7 +49828,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -49845,13 +49861,13 @@ components: key: environment value: production case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: billingcurrency:"USD" AND account_name:"prod-account" reference_table: null - enabled: true mapping: destination_key: team_owner - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - account_name - service @@ -49871,7 +49887,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -49896,7 +49912,7 @@ components: key: cost_center value: engineering case_insensitivity: true - if_not_exists: true + if_tag_exists: do_not_apply query: account_name:"dev-*" reference_table: null version: 1 @@ -50007,7 +50023,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/RulesetRespDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -50022,31 +50038,6 @@ components: - enabled - name type: object - RulesetRespDataAttributesRulesItemsMapping: - description: The definition of `RulesetRespDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object RulesetRespDataAttributesRulesItemsQuery: description: The definition of `RulesetRespDataAttributesRulesItemsQuery` object. nullable: true @@ -50057,16 +50048,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object RulesetRespDataAttributesRulesItemsQueryAddition: @@ -50100,8 +50092,12 @@ components: $ref: '#/components/schemas/RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: @@ -65004,13 +65000,13 @@ components: key: cost_center value: engineering case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: account_id:"123456789" AND service:"web-api" reference_table: null - enabled: true mapping: destination_key: team_owner - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - account_name - account_id @@ -65030,7 +65026,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -65082,7 +65078,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/UpdateRulesetRequestDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -65097,31 +65093,6 @@ components: - enabled - name type: object - UpdateRulesetRequestDataAttributesRulesItemsMapping: - description: The definition of `UpdateRulesetRequestDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object UpdateRulesetRequestDataAttributesRulesItemsQuery: description: The definition of `UpdateRulesetRequestDataAttributesRulesItemsQuery` object. @@ -65133,16 +65104,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object UpdateRulesetRequestDataAttributesRulesItemsQueryAddition: @@ -65176,8 +65148,12 @@ components: $ref: '#/components/schemas/UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: diff --git a/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset.rs b/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset.rs index df2c12598..276069d2d 100644 --- a/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset.rs +++ b/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset.rs @@ -28,10 +28,10 @@ async fn main() { "engineering".to_string(), ), ), - true, r#"account_id:"123456789" AND service:"web-api""#.to_string(), ) - .case_insensitivity(false), + .case_insensitivity(false) + .if_not_exists(true), )) .reference_table(None), ]) diff --git a/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset_1897535856.rs b/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset_1897535856.rs new file mode 100644 index 000000000..960a322ee --- /dev/null +++ b/examples/v2_cloud-cost-management_CreateTagPipelinesRuleset_1897535856.rs @@ -0,0 +1,51 @@ +// Create tag pipeline ruleset with if_tag_exists returns "OK" response +use datadog_api_client::datadog; +use datadog_api_client::datadogV2::api_cloud_cost_management::CloudCostManagementAPI; +use datadog_api_client::datadogV2::model::CreateRulesetRequest; +use datadog_api_client::datadogV2::model::CreateRulesetRequestData; +use datadog_api_client::datadogV2::model::CreateRulesetRequestDataAttributes; +use datadog_api_client::datadogV2::model::CreateRulesetRequestDataAttributesRulesItems; +use datadog_api_client::datadogV2::model::CreateRulesetRequestDataAttributesRulesItemsQuery; +use datadog_api_client::datadogV2::model::CreateRulesetRequestDataAttributesRulesItemsQueryAddition; +use datadog_api_client::datadogV2::model::CreateRulesetRequestDataType; +use datadog_api_client::datadogV2::model::DataAttributesRulesItemsIfTagExists; + +#[tokio::main] +async fn main() { + let body = CreateRulesetRequest::new().data( + CreateRulesetRequestData::new(CreateRulesetRequestDataType::CREATE_RULESET) + .attributes( + CreateRulesetRequestDataAttributes::new(vec![ + CreateRulesetRequestDataAttributesRulesItems::new( + true, + "Add Cost Center Tag".to_string(), + ) + .mapping(None) + .query(Some( + CreateRulesetRequestDataAttributesRulesItemsQuery::new( + Some( + CreateRulesetRequestDataAttributesRulesItemsQueryAddition::new( + "cost_center".to_string(), + "engineering".to_string(), + ), + ), + r#"account_id:"123456789" AND service:"web-api""#.to_string(), + ) + .case_insensitivity(false) + .if_tag_exists(DataAttributesRulesItemsIfTagExists::REPLACE), + )) + .reference_table(None), + ]) + .enabled(true), + ) + .id("New Ruleset".to_string()), + ); + let configuration = datadog::Configuration::new(); + let api = CloudCostManagementAPI::with_config(configuration); + let resp = api.create_tag_pipelines_ruleset(body).await; + if let Ok(value) = resp { + println!("{:#?}", value); + } else { + println!("{:#?}", resp.unwrap_err()); + } +} diff --git a/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset.rs b/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset.rs index 5a5802d81..2108d656a 100644 --- a/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset.rs +++ b/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset.rs @@ -1,11 +1,11 @@ // Update tag pipeline ruleset returns "OK" response use datadog_api_client::datadog; use datadog_api_client::datadogV2::api_cloud_cost_management::CloudCostManagementAPI; +use datadog_api_client::datadogV2::model::DataAttributesRulesItemsMapping; use datadog_api_client::datadogV2::model::UpdateRulesetRequest; use datadog_api_client::datadogV2::model::UpdateRulesetRequestData; use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataAttributes; use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataAttributesRulesItems; -use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataAttributesRulesItemsMapping; use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataType; #[tokio::main] @@ -20,11 +20,11 @@ async fn main() { "Account Name Mapping".to_string(), ) .mapping(Some( - UpdateRulesetRequestDataAttributesRulesItemsMapping::new( + DataAttributesRulesItemsMapping::new( "team_owner".to_string(), - true, vec!["account_name".to_string(), "account_id".to_string()], - ), + ) + .if_not_exists(true), )) .query(None) .reference_table(None)], diff --git a/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset_1964644735.rs b/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset_1964644735.rs new file mode 100644 index 000000000..f6046fa95 --- /dev/null +++ b/examples/v2_cloud-cost-management_UpdateTagPipelinesRuleset_1964644735.rs @@ -0,0 +1,47 @@ +// Update tag pipeline ruleset with if_tag_exists returns "OK" response +use datadog_api_client::datadog; +use datadog_api_client::datadogV2::api_cloud_cost_management::CloudCostManagementAPI; +use datadog_api_client::datadogV2::model::DataAttributesRulesItemsIfTagExists; +use datadog_api_client::datadogV2::model::DataAttributesRulesItemsMapping; +use datadog_api_client::datadogV2::model::UpdateRulesetRequest; +use datadog_api_client::datadogV2::model::UpdateRulesetRequestData; +use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataAttributes; +use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataAttributesRulesItems; +use datadog_api_client::datadogV2::model::UpdateRulesetRequestDataType; + +#[tokio::main] +async fn main() { + let body = UpdateRulesetRequest::new().data( + UpdateRulesetRequestData::new(UpdateRulesetRequestDataType::UPDATE_RULESET) + .attributes( + UpdateRulesetRequestDataAttributes::new( + true, + vec![UpdateRulesetRequestDataAttributesRulesItems::new( + true, + "Account Name Mapping".to_string(), + ) + .mapping(Some( + DataAttributesRulesItemsMapping::new( + "team_owner".to_string(), + vec!["account_name".to_string(), "account_id".to_string()], + ) + .if_tag_exists(DataAttributesRulesItemsIfTagExists::REPLACE), + )) + .query(None) + .reference_table(None)], + ) + .last_version(3611102), + ) + .id("New Ruleset".to_string()), + ); + let configuration = datadog::Configuration::new(); + let api = CloudCostManagementAPI::with_config(configuration); + let resp = api + .update_tag_pipelines_ruleset("ee10c3ff-312f-464c-b4f6-46adaa6d00a1".to_string(), body) + .await; + if let Ok(value) = resp { + println!("{:#?}", value); + } else { + println!("{:#?}", resp.unwrap_err()); + } +} diff --git a/src/datadogV2/model/mod.rs b/src/datadogV2/model/mod.rs index 22db0816c..1105af006 100644 --- a/src/datadogV2/model/mod.rs +++ b/src/datadogV2/model/mod.rs @@ -7816,8 +7816,10 @@ pub mod model_ruleset_resp_data_attributes_modified; pub use self::model_ruleset_resp_data_attributes_modified::RulesetRespDataAttributesModified; pub mod model_ruleset_resp_data_attributes_rules_items; pub use self::model_ruleset_resp_data_attributes_rules_items::RulesetRespDataAttributesRulesItems; -pub mod model_ruleset_resp_data_attributes_rules_items_mapping; -pub use self::model_ruleset_resp_data_attributes_rules_items_mapping::RulesetRespDataAttributesRulesItemsMapping; +pub mod model_data_attributes_rules_items_mapping; +pub use self::model_data_attributes_rules_items_mapping::DataAttributesRulesItemsMapping; +pub mod model_data_attributes_rules_items_if_tag_exists; +pub use self::model_data_attributes_rules_items_if_tag_exists::DataAttributesRulesItemsIfTagExists; pub mod model_ruleset_resp_data_attributes_rules_items_query; pub use self::model_ruleset_resp_data_attributes_rules_items_query::RulesetRespDataAttributesRulesItemsQuery; pub mod model_ruleset_resp_data_attributes_rules_items_query_addition; @@ -7836,8 +7838,6 @@ pub mod model_create_ruleset_request_data_attributes; pub use self::model_create_ruleset_request_data_attributes::CreateRulesetRequestDataAttributes; pub mod model_create_ruleset_request_data_attributes_rules_items; pub use self::model_create_ruleset_request_data_attributes_rules_items::CreateRulesetRequestDataAttributesRulesItems; -pub mod model_create_ruleset_request_data_attributes_rules_items_mapping; -pub use self::model_create_ruleset_request_data_attributes_rules_items_mapping::CreateRulesetRequestDataAttributesRulesItemsMapping; pub mod model_create_ruleset_request_data_attributes_rules_items_query; pub use self::model_create_ruleset_request_data_attributes_rules_items_query::CreateRulesetRequestDataAttributesRulesItemsQuery; pub mod model_create_ruleset_request_data_attributes_rules_items_query_addition; @@ -7880,8 +7880,6 @@ pub mod model_update_ruleset_request_data_attributes; pub use self::model_update_ruleset_request_data_attributes::UpdateRulesetRequestDataAttributes; pub mod model_update_ruleset_request_data_attributes_rules_items; pub use self::model_update_ruleset_request_data_attributes_rules_items::UpdateRulesetRequestDataAttributesRulesItems; -pub mod model_update_ruleset_request_data_attributes_rules_items_mapping; -pub use self::model_update_ruleset_request_data_attributes_rules_items_mapping::UpdateRulesetRequestDataAttributesRulesItemsMapping; pub mod model_update_ruleset_request_data_attributes_rules_items_query; pub use self::model_update_ruleset_request_data_attributes_rules_items_query::UpdateRulesetRequestDataAttributesRulesItemsQuery; pub mod model_update_ruleset_request_data_attributes_rules_items_query_addition; diff --git a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items.rs b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items.rs index 5f6cc3e93..185bab2ae 100644 --- a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items.rs +++ b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items.rs @@ -14,15 +14,13 @@ pub struct CreateRulesetRequestDataAttributesRulesItems { /// The `items` `enabled`. #[serde(rename = "enabled")] pub enabled: bool, - /// The definition of `CreateRulesetRequestDataAttributesRulesItemsMapping` object. + /// The definition of `DataAttributesRulesItemsMapping` object. #[serde( rename = "mapping", default, with = "::serde_with::rust::double_option" )] - pub mapping: Option< - Option, - >, + pub mapping: Option>, /// The `items` `metadata`. #[serde( rename = "metadata", @@ -69,7 +67,7 @@ impl CreateRulesetRequestDataAttributesRulesItems { pub fn mapping( mut self, - value: Option, + value: Option, ) -> Self { self.mapping = Some(value); self @@ -125,7 +123,9 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItems { M: MapAccess<'a>, { let mut enabled: Option = None; - let mut mapping: Option> = None; + let mut mapping: Option< + Option, + > = None; let mut metadata: Option>> = None; let mut name: Option = None; let mut query: Option< diff --git a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_query.rs b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_query.rs index 66ccc9673..33b83c49c 100644 --- a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_query.rs +++ b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_query.rs @@ -19,9 +19,13 @@ pub struct CreateRulesetRequestDataAttributesRulesItemsQuery { /// The `query` `case_insensitivity`. #[serde(rename = "case_insensitivity")] pub case_insensitivity: Option, - /// The `query` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, + pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `query` `query`. #[serde(rename = "query")] pub query: String, @@ -37,24 +41,41 @@ impl CreateRulesetRequestDataAttributesRulesItemsQuery { addition: Option< crate::datadogV2::model::CreateRulesetRequestDataAttributesRulesItemsQueryAddition, >, - if_not_exists: bool, query: String, ) -> CreateRulesetRequestDataAttributesRulesItemsQuery { + #[allow(deprecated)] CreateRulesetRequestDataAttributesRulesItemsQuery { addition, case_insensitivity: None, - if_not_exists, + if_not_exists: None, + if_tag_exists: None, query, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] + pub fn if_not_exists(mut self, value: bool) -> Self { + self.if_not_exists = Some(value); + self + } + + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -84,6 +105,9 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsQuery let mut addition: Option> = None; let mut case_insensitivity: Option = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut query: Option = None; let mut additional_properties: std::collections::BTreeMap< String, @@ -104,9 +128,27 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsQuery Some(serde_json::from_value(v).map_err(M::Error::custom)?); } "if_not_exists" => { + if v.is_null() { + continue; + } if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "query" => { query = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } @@ -118,14 +160,14 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsQuery } } let addition = addition.ok_or_else(|| M::Error::missing_field("addition"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; let query = query.ok_or_else(|| M::Error::missing_field("query"))?; + #[allow(deprecated)] let content = CreateRulesetRequestDataAttributesRulesItemsQuery { addition, case_insensitivity, if_not_exists, + if_tag_exists, query, additional_properties, _unparsed, diff --git a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_reference_table.rs b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_reference_table.rs index 445afbd97..317aada53 100644 --- a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_reference_table.rs +++ b/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_reference_table.rs @@ -17,9 +17,13 @@ pub struct CreateRulesetRequestDataAttributesRulesItemsReferenceTable { /// The `reference_table` `field_pairs`. #[serde(rename = "field_pairs")] pub field_pairs: Vec, - /// The `reference_table` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `reference_table` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `reference_table` `source_keys`. #[serde(rename = "source_keys")] pub source_keys: Vec, @@ -39,10 +43,12 @@ impl CreateRulesetRequestDataAttributesRulesItemsReferenceTable { source_keys: Vec, table_name: String, ) -> CreateRulesetRequestDataAttributesRulesItemsReferenceTable { + #[allow(deprecated)] CreateRulesetRequestDataAttributesRulesItemsReferenceTable { case_insensitivity: None, field_pairs, if_not_exists: None, + if_tag_exists: None, source_keys, table_name, additional_properties: std::collections::BTreeMap::new(), @@ -50,16 +56,27 @@ impl CreateRulesetRequestDataAttributesRulesItemsReferenceTable { } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] pub fn if_not_exists(mut self, value: bool) -> Self { self.if_not_exists = Some(value); self } + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -89,6 +106,9 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsRefer let mut case_insensitivity: Option = None; let mut field_pairs: Option> = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut source_keys: Option> = None; let mut table_name: Option = None; let mut additional_properties: std::collections::BTreeMap< @@ -117,6 +137,21 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsRefer if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "source_keys" => { source_keys = Some(serde_json::from_value(v).map_err(M::Error::custom)?); @@ -137,10 +172,12 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsRefer source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; let table_name = table_name.ok_or_else(|| M::Error::missing_field("table_name"))?; + #[allow(deprecated)] let content = CreateRulesetRequestDataAttributesRulesItemsReferenceTable { case_insensitivity, field_pairs, if_not_exists, + if_tag_exists, source_keys, table_name, additional_properties, diff --git a/src/datadogV2/model/model_data_attributes_rules_items_if_tag_exists.rs b/src/datadogV2/model/model_data_attributes_rules_items_if_tag_exists.rs new file mode 100644 index 000000000..6195f14bd --- /dev/null +++ b/src/datadogV2/model/model_data_attributes_rules_items_if_tag_exists.rs @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2019-Present Datadog, Inc. + +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum DataAttributesRulesItemsIfTagExists { + APPEND, + DO_NOT_APPLY, + REPLACE, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for DataAttributesRulesItemsIfTagExists { + fn to_string(&self) -> String { + match self { + Self::APPEND => String::from("append"), + Self::DO_NOT_APPLY => String::from("do_not_apply"), + Self::REPLACE => String::from("replace"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for DataAttributesRulesItemsIfTagExists { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for DataAttributesRulesItemsIfTagExists { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "append" => Self::APPEND, + "do_not_apply" => Self::DO_NOT_APPLY, + "replace" => Self::REPLACE, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_mapping.rs b/src/datadogV2/model/model_data_attributes_rules_items_mapping.rs similarity index 59% rename from src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_mapping.rs rename to src/datadogV2/model/model_data_attributes_rules_items_mapping.rs index 8bca397df..ae221b58b 100644 --- a/src/datadogV2/model/model_create_ruleset_request_data_attributes_rules_items_mapping.rs +++ b/src/datadogV2/model/model_data_attributes_rules_items_mapping.rs @@ -6,17 +6,21 @@ use serde::{Deserialize, Deserializer, Serialize}; use serde_with::skip_serializing_none; use std::fmt::{self, Formatter}; -/// The definition of `CreateRulesetRequestDataAttributesRulesItemsMapping` object. +/// The definition of `DataAttributesRulesItemsMapping` object. #[non_exhaustive] #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] -pub struct CreateRulesetRequestDataAttributesRulesItemsMapping { +pub struct DataAttributesRulesItemsMapping { /// The `mapping` `destination_key`. #[serde(rename = "destination_key")] pub destination_key: String, - /// The `mapping` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `mapping` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, + pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `mapping` `source_keys`. #[serde(rename = "source_keys")] pub source_keys: Vec, @@ -27,21 +31,37 @@ pub struct CreateRulesetRequestDataAttributesRulesItemsMapping { pub(crate) _unparsed: bool, } -impl CreateRulesetRequestDataAttributesRulesItemsMapping { +impl DataAttributesRulesItemsMapping { pub fn new( destination_key: String, - if_not_exists: bool, source_keys: Vec, - ) -> CreateRulesetRequestDataAttributesRulesItemsMapping { - CreateRulesetRequestDataAttributesRulesItemsMapping { + ) -> DataAttributesRulesItemsMapping { + #[allow(deprecated)] + DataAttributesRulesItemsMapping { destination_key, - if_not_exists, + if_not_exists: None, + if_tag_exists: None, source_keys, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, } } + #[allow(deprecated)] + pub fn if_not_exists(mut self, value: bool) -> Self { + self.if_not_exists = Some(value); + self + } + + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -51,14 +71,14 @@ impl CreateRulesetRequestDataAttributesRulesItemsMapping { } } -impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsMapping { +impl<'de> Deserialize<'de> for DataAttributesRulesItemsMapping { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { - struct CreateRulesetRequestDataAttributesRulesItemsMappingVisitor; - impl<'a> Visitor<'a> for CreateRulesetRequestDataAttributesRulesItemsMappingVisitor { - type Value = CreateRulesetRequestDataAttributesRulesItemsMapping; + struct DataAttributesRulesItemsMappingVisitor; + impl<'a> Visitor<'a> for DataAttributesRulesItemsMappingVisitor { + type Value = DataAttributesRulesItemsMapping; fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { f.write_str("a mapping") @@ -70,6 +90,9 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsMappi { let mut destination_key: Option = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut source_keys: Option> = None; let mut additional_properties: std::collections::BTreeMap< String, @@ -84,9 +107,27 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsMappi Some(serde_json::from_value(v).map_err(M::Error::custom)?); } "if_not_exists" => { + if v.is_null() { + continue; + } if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "source_keys" => { source_keys = Some(serde_json::from_value(v).map_err(M::Error::custom)?); @@ -100,14 +141,14 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsMappi } let destination_key = destination_key.ok_or_else(|| M::Error::missing_field("destination_key"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; let source_keys = source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; - let content = CreateRulesetRequestDataAttributesRulesItemsMapping { + #[allow(deprecated)] + let content = DataAttributesRulesItemsMapping { destination_key, if_not_exists, + if_tag_exists, source_keys, additional_properties, _unparsed, @@ -117,6 +158,6 @@ impl<'de> Deserialize<'de> for CreateRulesetRequestDataAttributesRulesItemsMappi } } - deserializer.deserialize_any(CreateRulesetRequestDataAttributesRulesItemsMappingVisitor) + deserializer.deserialize_any(DataAttributesRulesItemsMappingVisitor) } } diff --git a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items.rs b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items.rs index 741f61d4e..002b71b27 100644 --- a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items.rs +++ b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items.rs @@ -14,14 +14,13 @@ pub struct RulesetRespDataAttributesRulesItems { /// The `items` `enabled`. #[serde(rename = "enabled")] pub enabled: bool, - /// The definition of `RulesetRespDataAttributesRulesItemsMapping` object. + /// The definition of `DataAttributesRulesItemsMapping` object. #[serde( rename = "mapping", default, with = "::serde_with::rust::double_option" )] - pub mapping: - Option>, + pub mapping: Option>, /// The `items` `metadata`. #[serde( rename = "metadata", @@ -66,7 +65,7 @@ impl RulesetRespDataAttributesRulesItems { pub fn mapping( mut self, - value: Option, + value: Option, ) -> Self { self.mapping = Some(value); self @@ -121,7 +120,7 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItems { { let mut enabled: Option = None; let mut mapping: Option< - Option, + Option, > = None; let mut metadata: Option>> = None; let mut name: Option = None; diff --git a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_mapping.rs b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_mapping.rs deleted file mode 100644 index 9b69b3ac4..000000000 --- a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_mapping.rs +++ /dev/null @@ -1,122 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2019-Present Datadog, Inc. -use serde::de::{Error, MapAccess, Visitor}; -use serde::{Deserialize, Deserializer, Serialize}; -use serde_with::skip_serializing_none; -use std::fmt::{self, Formatter}; - -/// The definition of `RulesetRespDataAttributesRulesItemsMapping` object. -#[non_exhaustive] -#[skip_serializing_none] -#[derive(Clone, Debug, PartialEq, Serialize)] -pub struct RulesetRespDataAttributesRulesItemsMapping { - /// The `mapping` `destination_key`. - #[serde(rename = "destination_key")] - pub destination_key: String, - /// The `mapping` `if_not_exists`. - #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, - /// The `mapping` `source_keys`. - #[serde(rename = "source_keys")] - pub source_keys: Vec, - #[serde(flatten)] - pub additional_properties: std::collections::BTreeMap, - #[serde(skip)] - #[serde(default)] - pub(crate) _unparsed: bool, -} - -impl RulesetRespDataAttributesRulesItemsMapping { - pub fn new( - destination_key: String, - if_not_exists: bool, - source_keys: Vec, - ) -> RulesetRespDataAttributesRulesItemsMapping { - RulesetRespDataAttributesRulesItemsMapping { - destination_key, - if_not_exists, - source_keys, - additional_properties: std::collections::BTreeMap::new(), - _unparsed: false, - } - } - - pub fn additional_properties( - mut self, - value: std::collections::BTreeMap, - ) -> Self { - self.additional_properties = value; - self - } -} - -impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsMapping { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct RulesetRespDataAttributesRulesItemsMappingVisitor; - impl<'a> Visitor<'a> for RulesetRespDataAttributesRulesItemsMappingVisitor { - type Value = RulesetRespDataAttributesRulesItemsMapping; - - fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { - f.write_str("a mapping") - } - - fn visit_map(self, mut map: M) -> Result - where - M: MapAccess<'a>, - { - let mut destination_key: Option = None; - let mut if_not_exists: Option = None; - let mut source_keys: Option> = None; - let mut additional_properties: std::collections::BTreeMap< - String, - serde_json::Value, - > = std::collections::BTreeMap::new(); - let mut _unparsed = false; - - while let Some((k, v)) = map.next_entry::()? { - match k.as_str() { - "destination_key" => { - destination_key = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - "if_not_exists" => { - if_not_exists = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - "source_keys" => { - source_keys = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - &_ => { - if let Ok(value) = serde_json::from_value(v.clone()) { - additional_properties.insert(k, value); - } - } - } - } - let destination_key = - destination_key.ok_or_else(|| M::Error::missing_field("destination_key"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; - let source_keys = - source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; - - let content = RulesetRespDataAttributesRulesItemsMapping { - destination_key, - if_not_exists, - source_keys, - additional_properties, - _unparsed, - }; - - Ok(content) - } - } - - deserializer.deserialize_any(RulesetRespDataAttributesRulesItemsMappingVisitor) - } -} diff --git a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_query.rs b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_query.rs index 4796e5b9a..2bf621365 100644 --- a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_query.rs +++ b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_query.rs @@ -18,9 +18,13 @@ pub struct RulesetRespDataAttributesRulesItemsQuery { /// The `query` `case_insensitivity`. #[serde(rename = "case_insensitivity")] pub case_insensitivity: Option, - /// The `query` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, + pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `query` `query`. #[serde(rename = "query")] pub query: String, @@ -34,24 +38,41 @@ pub struct RulesetRespDataAttributesRulesItemsQuery { impl RulesetRespDataAttributesRulesItemsQuery { pub fn new( addition: Option, - if_not_exists: bool, query: String, ) -> RulesetRespDataAttributesRulesItemsQuery { + #[allow(deprecated)] RulesetRespDataAttributesRulesItemsQuery { addition, case_insensitivity: None, - if_not_exists, + if_not_exists: None, + if_tag_exists: None, query, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] + pub fn if_not_exists(mut self, value: bool) -> Self { + self.if_not_exists = Some(value); + self + } + + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -85,6 +106,9 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsQuery { > = None; let mut case_insensitivity: Option = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut query: Option = None; let mut additional_properties: std::collections::BTreeMap< String, @@ -105,9 +129,27 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsQuery { Some(serde_json::from_value(v).map_err(M::Error::custom)?); } "if_not_exists" => { + if v.is_null() { + continue; + } if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "query" => { query = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } @@ -119,14 +161,14 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsQuery { } } let addition = addition.ok_or_else(|| M::Error::missing_field("addition"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; let query = query.ok_or_else(|| M::Error::missing_field("query"))?; + #[allow(deprecated)] let content = RulesetRespDataAttributesRulesItemsQuery { addition, case_insensitivity, if_not_exists, + if_tag_exists, query, additional_properties, _unparsed, diff --git a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_reference_table.rs b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_reference_table.rs index aa791c48e..99030c6c2 100644 --- a/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_reference_table.rs +++ b/src/datadogV2/model/model_ruleset_resp_data_attributes_rules_items_reference_table.rs @@ -19,9 +19,13 @@ pub struct RulesetRespDataAttributesRulesItemsReferenceTable { pub field_pairs: Vec< crate::datadogV2::model::RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems, >, - /// The `reference_table` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `reference_table` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `reference_table` `source_keys`. #[serde(rename = "source_keys")] pub source_keys: Vec, @@ -41,10 +45,12 @@ impl RulesetRespDataAttributesRulesItemsReferenceTable { source_keys: Vec, table_name: String, ) -> RulesetRespDataAttributesRulesItemsReferenceTable { + #[allow(deprecated)] RulesetRespDataAttributesRulesItemsReferenceTable { case_insensitivity: None, field_pairs, if_not_exists: None, + if_tag_exists: None, source_keys, table_name, additional_properties: std::collections::BTreeMap::new(), @@ -52,16 +58,27 @@ impl RulesetRespDataAttributesRulesItemsReferenceTable { } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] pub fn if_not_exists(mut self, value: bool) -> Self { self.if_not_exists = Some(value); self } + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -91,6 +108,9 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsReferenceTable let mut case_insensitivity: Option = None; let mut field_pairs: Option> = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut source_keys: Option> = None; let mut table_name: Option = None; let mut additional_properties: std::collections::BTreeMap< @@ -119,6 +139,21 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsReferenceTable if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "source_keys" => { source_keys = Some(serde_json::from_value(v).map_err(M::Error::custom)?); @@ -139,10 +174,12 @@ impl<'de> Deserialize<'de> for RulesetRespDataAttributesRulesItemsReferenceTable source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; let table_name = table_name.ok_or_else(|| M::Error::missing_field("table_name"))?; + #[allow(deprecated)] let content = RulesetRespDataAttributesRulesItemsReferenceTable { case_insensitivity, field_pairs, if_not_exists, + if_tag_exists, source_keys, table_name, additional_properties, diff --git a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items.rs b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items.rs index 5b31d0597..ebb4cb0d2 100644 --- a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items.rs +++ b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items.rs @@ -14,15 +14,13 @@ pub struct UpdateRulesetRequestDataAttributesRulesItems { /// The `items` `enabled`. #[serde(rename = "enabled")] pub enabled: bool, - /// The definition of `UpdateRulesetRequestDataAttributesRulesItemsMapping` object. + /// The definition of `DataAttributesRulesItemsMapping` object. #[serde( rename = "mapping", default, with = "::serde_with::rust::double_option" )] - pub mapping: Option< - Option, - >, + pub mapping: Option>, /// The `items` `metadata`. #[serde( rename = "metadata", @@ -69,7 +67,7 @@ impl UpdateRulesetRequestDataAttributesRulesItems { pub fn mapping( mut self, - value: Option, + value: Option, ) -> Self { self.mapping = Some(value); self @@ -125,7 +123,9 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItems { M: MapAccess<'a>, { let mut enabled: Option = None; - let mut mapping: Option> = None; + let mut mapping: Option< + Option, + > = None; let mut metadata: Option>> = None; let mut name: Option = None; let mut query: Option< diff --git a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_mapping.rs b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_mapping.rs deleted file mode 100644 index 8b68a6fdf..000000000 --- a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_mapping.rs +++ /dev/null @@ -1,122 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2019-Present Datadog, Inc. -use serde::de::{Error, MapAccess, Visitor}; -use serde::{Deserialize, Deserializer, Serialize}; -use serde_with::skip_serializing_none; -use std::fmt::{self, Formatter}; - -/// The definition of `UpdateRulesetRequestDataAttributesRulesItemsMapping` object. -#[non_exhaustive] -#[skip_serializing_none] -#[derive(Clone, Debug, PartialEq, Serialize)] -pub struct UpdateRulesetRequestDataAttributesRulesItemsMapping { - /// The `mapping` `destination_key`. - #[serde(rename = "destination_key")] - pub destination_key: String, - /// The `mapping` `if_not_exists`. - #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, - /// The `mapping` `source_keys`. - #[serde(rename = "source_keys")] - pub source_keys: Vec, - #[serde(flatten)] - pub additional_properties: std::collections::BTreeMap, - #[serde(skip)] - #[serde(default)] - pub(crate) _unparsed: bool, -} - -impl UpdateRulesetRequestDataAttributesRulesItemsMapping { - pub fn new( - destination_key: String, - if_not_exists: bool, - source_keys: Vec, - ) -> UpdateRulesetRequestDataAttributesRulesItemsMapping { - UpdateRulesetRequestDataAttributesRulesItemsMapping { - destination_key, - if_not_exists, - source_keys, - additional_properties: std::collections::BTreeMap::new(), - _unparsed: false, - } - } - - pub fn additional_properties( - mut self, - value: std::collections::BTreeMap, - ) -> Self { - self.additional_properties = value; - self - } -} - -impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsMapping { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct UpdateRulesetRequestDataAttributesRulesItemsMappingVisitor; - impl<'a> Visitor<'a> for UpdateRulesetRequestDataAttributesRulesItemsMappingVisitor { - type Value = UpdateRulesetRequestDataAttributesRulesItemsMapping; - - fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { - f.write_str("a mapping") - } - - fn visit_map(self, mut map: M) -> Result - where - M: MapAccess<'a>, - { - let mut destination_key: Option = None; - let mut if_not_exists: Option = None; - let mut source_keys: Option> = None; - let mut additional_properties: std::collections::BTreeMap< - String, - serde_json::Value, - > = std::collections::BTreeMap::new(); - let mut _unparsed = false; - - while let Some((k, v)) = map.next_entry::()? { - match k.as_str() { - "destination_key" => { - destination_key = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - "if_not_exists" => { - if_not_exists = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - "source_keys" => { - source_keys = - Some(serde_json::from_value(v).map_err(M::Error::custom)?); - } - &_ => { - if let Ok(value) = serde_json::from_value(v.clone()) { - additional_properties.insert(k, value); - } - } - } - } - let destination_key = - destination_key.ok_or_else(|| M::Error::missing_field("destination_key"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; - let source_keys = - source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; - - let content = UpdateRulesetRequestDataAttributesRulesItemsMapping { - destination_key, - if_not_exists, - source_keys, - additional_properties, - _unparsed, - }; - - Ok(content) - } - } - - deserializer.deserialize_any(UpdateRulesetRequestDataAttributesRulesItemsMappingVisitor) - } -} diff --git a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_query.rs b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_query.rs index 0aec7ca08..f3fe00420 100644 --- a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_query.rs +++ b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_query.rs @@ -19,9 +19,13 @@ pub struct UpdateRulesetRequestDataAttributesRulesItemsQuery { /// The `query` `case_insensitivity`. #[serde(rename = "case_insensitivity")] pub case_insensitivity: Option, - /// The `query` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] - pub if_not_exists: bool, + pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `query` `query`. #[serde(rename = "query")] pub query: String, @@ -37,24 +41,41 @@ impl UpdateRulesetRequestDataAttributesRulesItemsQuery { addition: Option< crate::datadogV2::model::UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, >, - if_not_exists: bool, query: String, ) -> UpdateRulesetRequestDataAttributesRulesItemsQuery { + #[allow(deprecated)] UpdateRulesetRequestDataAttributesRulesItemsQuery { addition, case_insensitivity: None, - if_not_exists, + if_not_exists: None, + if_tag_exists: None, query, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] + pub fn if_not_exists(mut self, value: bool) -> Self { + self.if_not_exists = Some(value); + self + } + + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -84,6 +105,9 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsQuery let mut addition: Option> = None; let mut case_insensitivity: Option = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut query: Option = None; let mut additional_properties: std::collections::BTreeMap< String, @@ -104,9 +128,27 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsQuery Some(serde_json::from_value(v).map_err(M::Error::custom)?); } "if_not_exists" => { + if v.is_null() { + continue; + } if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "query" => { query = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } @@ -118,14 +160,14 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsQuery } } let addition = addition.ok_or_else(|| M::Error::missing_field("addition"))?; - let if_not_exists = - if_not_exists.ok_or_else(|| M::Error::missing_field("if_not_exists"))?; let query = query.ok_or_else(|| M::Error::missing_field("query"))?; + #[allow(deprecated)] let content = UpdateRulesetRequestDataAttributesRulesItemsQuery { addition, case_insensitivity, if_not_exists, + if_tag_exists, query, additional_properties, _unparsed, diff --git a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_reference_table.rs b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_reference_table.rs index b34305f03..254452578 100644 --- a/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_reference_table.rs +++ b/src/datadogV2/model/model_update_ruleset_request_data_attributes_rules_items_reference_table.rs @@ -17,9 +17,13 @@ pub struct UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { /// The `reference_table` `field_pairs`. #[serde(rename = "field_pairs")] pub field_pairs: Vec, - /// The `reference_table` `if_not_exists`. + /// Deprecated. Use `if_tag_exists` instead. The `reference_table` `if_not_exists`. + #[deprecated] #[serde(rename = "if_not_exists")] pub if_not_exists: Option, + /// The behavior when the tag already exists. + #[serde(rename = "if_tag_exists")] + pub if_tag_exists: Option, /// The `reference_table` `source_keys`. #[serde(rename = "source_keys")] pub source_keys: Vec, @@ -39,10 +43,12 @@ impl UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { source_keys: Vec, table_name: String, ) -> UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { + #[allow(deprecated)] UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { case_insensitivity: None, field_pairs, if_not_exists: None, + if_tag_exists: None, source_keys, table_name, additional_properties: std::collections::BTreeMap::new(), @@ -50,16 +56,27 @@ impl UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { } } + #[allow(deprecated)] pub fn case_insensitivity(mut self, value: bool) -> Self { self.case_insensitivity = Some(value); self } + #[allow(deprecated)] pub fn if_not_exists(mut self, value: bool) -> Self { self.if_not_exists = Some(value); self } + #[allow(deprecated)] + pub fn if_tag_exists( + mut self, + value: crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + ) -> Self { + self.if_tag_exists = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -89,6 +106,9 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsRefer let mut case_insensitivity: Option = None; let mut field_pairs: Option> = None; let mut if_not_exists: Option = None; + let mut if_tag_exists: Option< + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists, + > = None; let mut source_keys: Option> = None; let mut table_name: Option = None; let mut additional_properties: std::collections::BTreeMap< @@ -117,6 +137,21 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsRefer if_not_exists = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "if_tag_exists" => { + if v.is_null() { + continue; + } + if_tag_exists = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _if_tag_exists) = if_tag_exists { + match _if_tag_exists { + crate::datadogV2::model::DataAttributesRulesItemsIfTagExists::UnparsedObject(_if_tag_exists) => { + _unparsed = true; + }, + _ => {} + } + } + } "source_keys" => { source_keys = Some(serde_json::from_value(v).map_err(M::Error::custom)?); @@ -137,10 +172,12 @@ impl<'de> Deserialize<'de> for UpdateRulesetRequestDataAttributesRulesItemsRefer source_keys.ok_or_else(|| M::Error::missing_field("source_keys"))?; let table_name = table_name.ok_or_else(|| M::Error::missing_field("table_name"))?; + #[allow(deprecated)] let content = UpdateRulesetRequestDataAttributesRulesItemsReferenceTable { case_insensitivity, field_pairs, if_not_exists, + if_tag_exists, source_keys, table_name, additional_properties, diff --git a/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen b/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen new file mode 100644 index 000000000..ed9c47c8e --- /dev/null +++ b/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen @@ -0,0 +1 @@ +2026-02-04T16:26:04.110Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json b/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json new file mode 100644 index 000000000..5946a17bb --- /dev/null +++ b/tests/scenarios/cassettes/v2/cloud_cost_management/Create-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json @@ -0,0 +1,39 @@ +{ + "http_interactions": [ + { + "request": { + "body": { + "string": "{\"data\":{\"attributes\":{\"enabled\":true,\"rules\":[{\"enabled\":true,\"mapping\":null,\"name\":\"Add Cost Center Tag\",\"query\":{\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"case_insensitivity\":false,\"if_tag_exists\":\"replace\",\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\"},\"reference_table\":null}]},\"id\":\"New Ruleset\",\"type\":\"create_ruleset\"}}", + "encoding": null + }, + "headers": { + "Accept": [ + "application/json" + ], + "Content-Type": [ + "application/json" + ] + }, + "method": "post", + "uri": "https://api.datadoghq.com/api/v2/tags/enrichment" + }, + "response": { + "body": { + "string": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759947966,\"nanos\":679638000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759947966,\"nanos\":679638000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Add Cost Center Tag\",\"enabled\":true,\"query\":{\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\",\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"if_tag_exists\":\"replace\",\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3611102}}}", + "encoding": null + }, + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + }, + "recorded_at": "Wed, 04 Feb 2026 16:26:04 GMT" + } + ], + "recorded_with": "VCR 6.0.0" +} \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen b/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen new file mode 100644 index 000000000..3de83d426 --- /dev/null +++ b/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.frozen @@ -0,0 +1 @@ +2025-10-08T19:15:10.916Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json b/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json new file mode 100644 index 000000000..a008e5193 --- /dev/null +++ b/tests/scenarios/cassettes/v2/cloud_cost_management/Update-tag-pipeline-ruleset-with-if-tag-exists-returns-OK-response.json @@ -0,0 +1,39 @@ +{ + "http_interactions": [ + { + "request": { + "body": { + "string": "{\"data\":{\"attributes\":{\"enabled\":true,\"last_version\":3611102,\"rules\":[{\"enabled\":true,\"mapping\":{\"destination_key\":\"team_owner\",\"if_tag_exists\":\"replace\",\"source_keys\":[\"account_name\",\"account_id\"]},\"name\":\"Account Name Mapping\",\"query\":null,\"reference_table\":null}]},\"id\":\"New Ruleset\",\"type\":\"update_ruleset\"}}", + "encoding": null + }, + "headers": { + "Accept": [ + "application/json" + ], + "Content-Type": [ + "application/json" + ] + }, + "method": "patch", + "uri": "https://api.datadoghq.com/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + }, + "response": { + "body": { + "string": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759950911,\"nanos\":31873000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759950911,\"nanos\":31873000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Account Name Mapping\",\"enabled\":true,\"query\":null,\"mapping\":{\"source_keys\":[\"account_name\",\"account_id\"],\"destination_key\":\"team_owner\",\"if_tag_exists\":\"replace\"},\"reference_table\":null,\"metadata\":null}],\"version\":3611113}}}", + "encoding": null + }, + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + }, + "recorded_at": "Wed, 08 Oct 2025 19:15:10 GMT" + } + ], + "recorded_with": "VCR 6.0.0" +} \ No newline at end of file diff --git a/tests/scenarios/features/v2/cloud_cost_management.feature b/tests/scenarios/features/v2/cloud_cost_management.feature index 66ccd680c..312e05fb3 100644 --- a/tests/scenarios/features/v2/cloud_cost_management.feature +++ b/tests/scenarios/features/v2/cloud_cost_management.feature @@ -97,6 +97,15 @@ Feature: Cloud Cost Management And the response "data.type" is equal to "ruleset" And the response "data.attributes.name" is equal to "New Ruleset" + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "CreateTagPipelinesRuleset" request + And body with value {"data": {"attributes": {"enabled": true, "rules": [{"enabled": true, "mapping": null, "name": "Add Cost Center Tag", "query": {"addition": {"key": "cost_center", "value": "engineering"}, "case_insensitivity": false, "if_tag_exists": "replace", "query": "account_id:\"123456789\" AND service:\"web-api\""}, "reference_table": null}]}, "id": "New Ruleset", "type": "create_ruleset"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ruleset" + And the response "data.attributes.name" is equal to "New Ruleset" + @generated @skip @team:DataDog/cloud-cost-management Scenario: Delete Cloud Cost Management AWS CUR config returns "Bad Request" response Given new "DeleteCostAWSCURConfig" request @@ -447,6 +456,14 @@ Feature: Cloud Cost Management When the request is sent Then the response status is 200 OK + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "UpdateTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + And body with value {"data": {"attributes": {"enabled": true, "last_version": 3611102, "rules": [{"enabled": true, "mapping": {"destination_key": "team_owner", "if_tag_exists": "replace", "source_keys": ["account_name", "account_id"]}, "name": "Account Name Mapping", "query": null, "reference_table": null}]}, "id": "New Ruleset", "type": "update_ruleset"}} + When the request is sent + Then the response status is 200 OK + @replay-only @team:DataDog/cloud-cost-management Scenario: Upload Custom Costs File returns "Accepted" response Given new "UploadCustomCostsFile" request