Skip to content

Commit dd8b794

Browse files
amaskara-ddci.datadog-api-spec
and
ci.datadog-api-spec
authored
include additionalProperties by default and check when false (#249)
Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent cd297bf commit dd8b794

File tree

1,778 files changed

+38839
-2213
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,778 files changed

+38839
-2213
lines changed

.generator/src/generator/formatter.py

+3
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ def format_data_with_schema_dict(
573573
missing = required_properties - set(data.keys())
574574
if missing:
575575
raise ValueError(f"missing required properties: {missing}")
576+
additionalProperties = set(data.keys()) - set(schema["properties"].keys())
577+
if schema.get("additionalProperties") == False and additionalProperties:
578+
raise ValueError(f"additional properties not allowed: {additionalProperties}")
576579
for k, v in schema["properties"].items():
577580
if k not in data:
578581
continue

.generator/src/generator/templates/model_simple.j2

+12-9
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ pub struct {{ name }} {
2525
#[serde(rename = "{{ attr }}"{% if not required and nullable%}, default, with = "::serde_with::rust::double_option"{% endif %})]
2626
pub {{propertyName}}: {{dataType}},
2727
{%- endfor %}
28-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
29-
{%- set dataType = get_type(model.additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
28+
{%- set additionalProperties = model.get("additionalProperties", {}) %}
29+
{%- if additionalProperties != false %}
30+
{%- set dataType = get_type(additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
3031
#[serde(flatten)]
3132
pub additional_properties: std::collections::BTreeMap<String, {{ dataType }}>,
3233
{%- endif %}
@@ -51,7 +52,7 @@ impl {{ name }} {
5152
{{ attr|variable_name }}: None,
5253
{%- endif %}
5354
{%- endfor %}
54-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
55+
{%- if additionalProperties != false %}
5556
additional_properties: std::collections::BTreeMap::new(),
5657
{%- endif %}
5758
_unparsed: false,
@@ -68,8 +69,8 @@ impl {{ name }} {
6869
self
6970
}
7071
{% endfor %}
71-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
72-
{%- set dataType = get_type(model.additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
72+
{%- if additionalProperties != false %}
73+
{%- set dataType = get_type(additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
7374
pub fn additional_properties(mut self, value: std::collections::BTreeMap<String, {{ dataType }}>) -> Self {
7475
self.additional_properties = value;
7576
self
@@ -110,8 +111,8 @@ impl<'de> Deserialize<'de> for {{ name }} {
110111
let mut {{ propertyName }}: {% if required %}Option<{% endif %}{{ dataType }}{% if required %}>{% endif %} = None;
111112
{%- endfor %}
112113

113-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
114-
{%- set dataType = get_type(model.additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
114+
{%- if additionalProperties != false %}
115+
{%- set dataType = get_type(additionalProperties, alternative_name=None, render_nullable=false, render_option=false, render_box=false, version=version) %}
115116
let mut additional_properties: std::collections::BTreeMap<String, {{ dataType }}> = std::collections::BTreeMap::new();
116117
{%- endif %}
117118
let mut _unparsed = false;
@@ -143,10 +144,12 @@ impl<'de> Deserialize<'de> for {{ name }} {
143144
},
144145
{%- endfor %}
145146
&_ => {
146-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
147+
{%- if additionalProperties != false %}
147148
if let Ok(value) = serde_json::from_value(v.clone()) {
148149
additional_properties.insert(k, value);
149150
}
151+
{% else %}
152+
return Err(serde::de::Error::custom("Additional properties not allowed"));
150153
{%- endif %}
151154
},
152155
}
@@ -173,7 +176,7 @@ impl<'de> Deserialize<'de> for {{ name }} {
173176
{%- set propertyName = attr|variable_name %}
174177
{{ propertyName }},
175178
{%- endfor %}
176-
{%- if model.additionalProperties is defined and model.additionalProperties != false %}
179+
{%- if additionalProperties != false %}
177180
additional_properties,
178181
{%- endif %}
179182
_unparsed,

LICENSE-3rdparty.csv

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
Component,Origin,License,Copyright
22
addr2line,https://github.com/gimli-rs/addr2line,Apache-2.0 OR MIT,The addr2line Authors
33
adler,https://github.com/jonas-schievink/adler,0BSD OR MIT OR Apache-2.0,Jonas Schievink <[email protected]>
4+
adler2,https://github.com/oyvindln/adler2,0BSD OR MIT OR Apache-2.0,"Jonas Schievink <[email protected]>, oyvindln <[email protected]>"
45
android-tzdata,https://github.com/RumovZ/android-tzdata,MIT OR Apache-2.0,RumovZ
56
android_system_properties,https://github.com/nical/android_system_properties,MIT OR Apache-2.0,Nicolas Silva <[email protected]>
67
anyhow,https://github.com/dtolnay/anyhow,MIT OR Apache-2.0,David Tolnay <[email protected]>

src/datadogV1/model/model_add_signal_to_incident_request.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ pub struct AddSignalToIncidentRequest {
2020
/// Version of the updated signal. If server side version is higher, update will be rejected.
2121
#[serde(rename = "version")]
2222
pub version: Option<i64>,
23+
#[serde(flatten)]
24+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
2325
#[serde(skip)]
2426
#[serde(default)]
2527
pub(crate) _unparsed: bool,
@@ -31,6 +33,7 @@ impl AddSignalToIncidentRequest {
3133
add_to_signal_timeline: None,
3234
incident_id,
3335
version: None,
36+
additional_properties: std::collections::BTreeMap::new(),
3437
_unparsed: false,
3538
}
3639
}
@@ -44,6 +47,14 @@ impl AddSignalToIncidentRequest {
4447
self.version = Some(value);
4548
self
4649
}
50+
51+
pub fn additional_properties(
52+
mut self,
53+
value: std::collections::BTreeMap<String, serde_json::Value>,
54+
) -> Self {
55+
self.additional_properties = value;
56+
self
57+
}
4758
}
4859

4960
impl<'de> Deserialize<'de> for AddSignalToIncidentRequest {
@@ -66,6 +77,10 @@ impl<'de> Deserialize<'de> for AddSignalToIncidentRequest {
6677
let mut add_to_signal_timeline: Option<bool> = None;
6778
let mut incident_id: Option<i64> = None;
6879
let mut version: Option<i64> = None;
80+
let mut additional_properties: std::collections::BTreeMap<
81+
String,
82+
serde_json::Value,
83+
> = std::collections::BTreeMap::new();
6984
let mut _unparsed = false;
7085

7186
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
@@ -87,7 +102,11 @@ impl<'de> Deserialize<'de> for AddSignalToIncidentRequest {
87102
}
88103
version = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
89104
}
90-
&_ => {}
105+
&_ => {
106+
if let Ok(value) = serde_json::from_value(v.clone()) {
107+
additional_properties.insert(k, value);
108+
}
109+
}
91110
}
92111
}
93112
let incident_id =
@@ -97,6 +116,7 @@ impl<'de> Deserialize<'de> for AddSignalToIncidentRequest {
97116
add_to_signal_timeline,
98117
incident_id,
99118
version,
119+
additional_properties,
100120
_unparsed,
101121
};
102122

src/datadogV1/model/model_alert_graph_widget_definition.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ pub struct AlertGraphWidgetDefinition {
3232
/// Whether to display the Alert Graph as a timeseries or a top list.
3333
#[serde(rename = "viz_type")]
3434
pub viz_type: crate::datadogV1::model::WidgetVizType,
35+
#[serde(flatten)]
36+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
3537
#[serde(skip)]
3638
#[serde(default)]
3739
pub(crate) _unparsed: bool,
@@ -51,6 +53,7 @@ impl AlertGraphWidgetDefinition {
5153
title_size: None,
5254
type_,
5355
viz_type,
56+
additional_properties: std::collections::BTreeMap::new(),
5457
_unparsed: false,
5558
}
5659
}
@@ -74,6 +77,14 @@ impl AlertGraphWidgetDefinition {
7477
self.title_size = Some(value);
7578
self
7679
}
80+
81+
pub fn additional_properties(
82+
mut self,
83+
value: std::collections::BTreeMap<String, serde_json::Value>,
84+
) -> Self {
85+
self.additional_properties = value;
86+
self
87+
}
7788
}
7889

7990
impl<'de> Deserialize<'de> for AlertGraphWidgetDefinition {
@@ -101,6 +112,10 @@ impl<'de> Deserialize<'de> for AlertGraphWidgetDefinition {
101112
let mut type_: Option<crate::datadogV1::model::AlertGraphWidgetDefinitionType> =
102113
None;
103114
let mut viz_type: Option<crate::datadogV1::model::WidgetVizType> = None;
115+
let mut additional_properties: std::collections::BTreeMap<
116+
String,
117+
serde_json::Value,
118+
> = std::collections::BTreeMap::new();
104119
let mut _unparsed = false;
105120

106121
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
@@ -167,7 +182,11 @@ impl<'de> Deserialize<'de> for AlertGraphWidgetDefinition {
167182
}
168183
}
169184
}
170-
&_ => {}
185+
&_ => {
186+
if let Ok(value) = serde_json::from_value(v.clone()) {
187+
additional_properties.insert(k, value);
188+
}
189+
}
171190
}
172191
}
173192
let alert_id = alert_id.ok_or_else(|| M::Error::missing_field("alert_id"))?;
@@ -182,6 +201,7 @@ impl<'de> Deserialize<'de> for AlertGraphWidgetDefinition {
182201
title_size,
183202
type_,
184203
viz_type,
204+
additional_properties,
185205
_unparsed,
186206
};
187207

src/datadogV1/model/model_alert_value_widget_definition.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ pub struct AlertValueWidgetDefinition {
3535
/// Unit to display with the value.
3636
#[serde(rename = "unit")]
3737
pub unit: Option<String>,
38+
#[serde(flatten)]
39+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
3840
#[serde(skip)]
3941
#[serde(default)]
4042
pub(crate) _unparsed: bool,
@@ -54,6 +56,7 @@ impl AlertValueWidgetDefinition {
5456
title_size: None,
5557
type_,
5658
unit: None,
59+
additional_properties: std::collections::BTreeMap::new(),
5760
_unparsed: false,
5861
}
5962
}
@@ -87,6 +90,14 @@ impl AlertValueWidgetDefinition {
8790
self.unit = Some(value);
8891
self
8992
}
93+
94+
pub fn additional_properties(
95+
mut self,
96+
value: std::collections::BTreeMap<String, serde_json::Value>,
97+
) -> Self {
98+
self.additional_properties = value;
99+
self
100+
}
90101
}
91102

92103
impl<'de> Deserialize<'de> for AlertValueWidgetDefinition {
@@ -115,6 +126,10 @@ impl<'de> Deserialize<'de> for AlertValueWidgetDefinition {
115126
let mut type_: Option<crate::datadogV1::model::AlertValueWidgetDefinitionType> =
116127
None;
117128
let mut unit: Option<String> = None;
129+
let mut additional_properties: std::collections::BTreeMap<
130+
String,
131+
serde_json::Value,
132+
> = std::collections::BTreeMap::new();
118133
let mut _unparsed = false;
119134

120135
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
@@ -190,7 +205,11 @@ impl<'de> Deserialize<'de> for AlertValueWidgetDefinition {
190205
}
191206
unit = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
192207
}
193-
&_ => {}
208+
&_ => {
209+
if let Ok(value) = serde_json::from_value(v.clone()) {
210+
additional_properties.insert(k, value);
211+
}
212+
}
194213
}
195214
}
196215
let alert_id = alert_id.ok_or_else(|| M::Error::missing_field("alert_id"))?;
@@ -205,6 +224,7 @@ impl<'de> Deserialize<'de> for AlertValueWidgetDefinition {
205224
title_size,
206225
type_,
207226
unit,
227+
additional_properties,
208228
_unparsed,
209229
};
210230

src/datadogV1/model/model_api_error_response.rs

+25-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ pub struct APIErrorResponse {
1414
/// Array of errors returned by the API.
1515
#[serde(rename = "errors")]
1616
pub errors: Vec<String>,
17+
#[serde(flatten)]
18+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
1719
#[serde(skip)]
1820
#[serde(default)]
1921
pub(crate) _unparsed: bool,
@@ -23,9 +25,18 @@ impl APIErrorResponse {
2325
pub fn new(errors: Vec<String>) -> APIErrorResponse {
2426
APIErrorResponse {
2527
errors,
28+
additional_properties: std::collections::BTreeMap::new(),
2629
_unparsed: false,
2730
}
2831
}
32+
33+
pub fn additional_properties(
34+
mut self,
35+
value: std::collections::BTreeMap<String, serde_json::Value>,
36+
) -> Self {
37+
self.additional_properties = value;
38+
self
39+
}
2940
}
3041

3142
impl<'de> Deserialize<'de> for APIErrorResponse {
@@ -46,19 +57,31 @@ impl<'de> Deserialize<'de> for APIErrorResponse {
4657
M: MapAccess<'a>,
4758
{
4859
let mut errors: Option<Vec<String>> = None;
60+
let mut additional_properties: std::collections::BTreeMap<
61+
String,
62+
serde_json::Value,
63+
> = std::collections::BTreeMap::new();
4964
let mut _unparsed = false;
5065

5166
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
5267
match k.as_str() {
5368
"errors" => {
5469
errors = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
5570
}
56-
&_ => {}
71+
&_ => {
72+
if let Ok(value) = serde_json::from_value(v.clone()) {
73+
additional_properties.insert(k, value);
74+
}
75+
}
5776
}
5877
}
5978
let errors = errors.ok_or_else(|| M::Error::missing_field("errors"))?;
6079

61-
let content = APIErrorResponse { errors, _unparsed };
80+
let content = APIErrorResponse {
81+
errors,
82+
additional_properties,
83+
_unparsed,
84+
};
6285

6386
Ok(content)
6487
}

0 commit comments

Comments
 (0)