Skip to content

Commit 9c4c520

Browse files
authored
Handle additionalProperties set to false (#1763)
* handle when additionalProperties is set to false * lint and generate
1 parent ac2f1e3 commit 9c4c520

File tree

3 files changed

+120
-90
lines changed

3 files changed

+120
-90
lines changed

.generator/src/generator/templates/model/ObjectSerializer.j2

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,18 @@ export class ObjectSerializer {
150150
}
151151
}
152152

153-
let additionalProperties = attributesMap["additionalProperties"]
154-
if (additionalProperties && data.additionalProperties) {
155-
for (const key in data.additionalProperties) {
156-
instance[key] = ObjectSerializer.serialize(
157-
data.additionalProperties[key],
158-
additionalProperties.type,
159-
additionalProperties.format
160-
);
153+
if (data.additionalProperties) {
154+
const additionalPropertiesMap = attributesMap["additionalProperties"];
155+
if (additionalPropertiesMap) {
156+
for (const key in data.additionalProperties) {
157+
instance[key] = ObjectSerializer.serialize(
158+
data.additionalProperties[key],
159+
additionalPropertiesMap.type,
160+
additionalPropertiesMap.format
161+
);
162+
}
163+
} else {
164+
throw new Error(`additionalProperties found in ${type}`);
161165
}
162166
}
163167

@@ -244,28 +248,38 @@ export class ObjectSerializer {
244248

245249
const instance = new typeMap[type]();
246250
const attributesMap = typeMap[type].getAttributeTypeMap();
247-
let extraAttributes: any = []
248-
if ("additionalProperties" in attributesMap) {
249-
const attributesBaseNames = Object.keys(attributesMap).reduce((o, key) => Object.assign(o, {[attributesMap[key].baseName]: ""}), {});
250-
extraAttributes = Object.keys(data).filter((key) => !Object.prototype.hasOwnProperty.call(attributesBaseNames, key))
251-
}
252-
253-
for (const attributeName in attributesMap) {
254-
const attributeObj = attributesMap[attributeName];
255-
if (attributeName == "additionalProperties") {
256-
if (extraAttributes.length > 0) {
251+
const attributesBaseNames = Object.keys(attributesMap).reduce(
252+
(o, key) => Object.assign(o, { [attributesMap[key].baseName]: "" }),
253+
{}
254+
);
255+
const extraAttributes = Object.keys(data).filter(
256+
(key) =>
257+
!Object.prototype.hasOwnProperty.call(attributesBaseNames, key)
258+
);
259+
260+
if (extraAttributes.length > 0) {
261+
if ("additionalProperties" in attributesMap) {
257262
if (!instance.additionalProperties) {
258263
instance.additionalProperties = {};
259264
}
260265

266+
const attributeObj = attributesMap["additionalProperties"];
261267
for (const key in extraAttributes) {
262-
instance.additionalProperties[extraAttributes[key]] = ObjectSerializer.deserialize(
263-
data[extraAttributes[key]],
264-
attributeObj.type,
265-
attributeObj.format
266-
);
268+
instance.additionalProperties[extraAttributes[key]] =
269+
ObjectSerializer.deserialize(
270+
data[extraAttributes[key]],
271+
attributeObj.type,
272+
attributeObj.format
273+
);
267274
}
268-
}
275+
} else {
276+
throw new Error(`found extra attributes '${extraAttributes}' in ${type}`);
277+
}
278+
}
279+
280+
for (const attributeName in attributesMap) {
281+
const attributeObj = attributesMap[attributeName];
282+
if (attributeName === "additionalProperties") {
269283
continue;
270284
}
271285

packages/datadog-api-client-v1/models/ObjectSerializer.ts

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2459,14 +2459,18 @@ export class ObjectSerializer {
24592459
}
24602460
}
24612461

2462-
const additionalProperties = attributesMap["additionalProperties"];
2463-
if (additionalProperties && data.additionalProperties) {
2464-
for (const key in data.additionalProperties) {
2465-
instance[key] = ObjectSerializer.serialize(
2466-
data.additionalProperties[key],
2467-
additionalProperties.type,
2468-
additionalProperties.format
2469-
);
2462+
if (data.additionalProperties) {
2463+
const additionalPropertiesMap = attributesMap["additionalProperties"];
2464+
if (additionalPropertiesMap) {
2465+
for (const key in data.additionalProperties) {
2466+
instance[key] = ObjectSerializer.serialize(
2467+
data.additionalProperties[key],
2468+
additionalPropertiesMap.type,
2469+
additionalPropertiesMap.format
2470+
);
2471+
}
2472+
} else {
2473+
throw new Error(`additionalProperties found in ${type}`);
24702474
}
24712475
}
24722476

@@ -2577,35 +2581,39 @@ export class ObjectSerializer {
25772581

25782582
const instance = new typeMap[type]();
25792583
const attributesMap = typeMap[type].getAttributeTypeMap();
2580-
let extraAttributes: any = [];
2581-
if ("additionalProperties" in attributesMap) {
2582-
const attributesBaseNames = Object.keys(attributesMap).reduce(
2583-
(o, key) => Object.assign(o, { [attributesMap[key].baseName]: "" }),
2584-
{}
2585-
);
2586-
extraAttributes = Object.keys(data).filter(
2587-
(key) =>
2588-
!Object.prototype.hasOwnProperty.call(attributesBaseNames, key)
2589-
);
2584+
const attributesBaseNames = Object.keys(attributesMap).reduce(
2585+
(o, key) => Object.assign(o, { [attributesMap[key].baseName]: "" }),
2586+
{}
2587+
);
2588+
const extraAttributes = Object.keys(data).filter(
2589+
(key) => !Object.prototype.hasOwnProperty.call(attributesBaseNames, key)
2590+
);
2591+
2592+
if (extraAttributes.length > 0) {
2593+
if ("additionalProperties" in attributesMap) {
2594+
if (!instance.additionalProperties) {
2595+
instance.additionalProperties = {};
2596+
}
2597+
2598+
const attributeObj = attributesMap["additionalProperties"];
2599+
for (const key in extraAttributes) {
2600+
instance.additionalProperties[extraAttributes[key]] =
2601+
ObjectSerializer.deserialize(
2602+
data[extraAttributes[key]],
2603+
attributeObj.type,
2604+
attributeObj.format
2605+
);
2606+
}
2607+
} else {
2608+
throw new Error(
2609+
`found extra attributes '${extraAttributes}' in ${type}`
2610+
);
2611+
}
25902612
}
25912613

25922614
for (const attributeName in attributesMap) {
25932615
const attributeObj = attributesMap[attributeName];
2594-
if (attributeName == "additionalProperties") {
2595-
if (extraAttributes.length > 0) {
2596-
if (!instance.additionalProperties) {
2597-
instance.additionalProperties = {};
2598-
}
2599-
2600-
for (const key in extraAttributes) {
2601-
instance.additionalProperties[extraAttributes[key]] =
2602-
ObjectSerializer.deserialize(
2603-
data[extraAttributes[key]],
2604-
attributeObj.type,
2605-
attributeObj.format
2606-
);
2607-
}
2608-
}
2616+
if (attributeName === "additionalProperties") {
26092617
continue;
26102618
}
26112619

packages/datadog-api-client-v2/models/ObjectSerializer.ts

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3424,14 +3424,18 @@ export class ObjectSerializer {
34243424
}
34253425
}
34263426

3427-
const additionalProperties = attributesMap["additionalProperties"];
3428-
if (additionalProperties && data.additionalProperties) {
3429-
for (const key in data.additionalProperties) {
3430-
instance[key] = ObjectSerializer.serialize(
3431-
data.additionalProperties[key],
3432-
additionalProperties.type,
3433-
additionalProperties.format
3434-
);
3427+
if (data.additionalProperties) {
3428+
const additionalPropertiesMap = attributesMap["additionalProperties"];
3429+
if (additionalPropertiesMap) {
3430+
for (const key in data.additionalProperties) {
3431+
instance[key] = ObjectSerializer.serialize(
3432+
data.additionalProperties[key],
3433+
additionalPropertiesMap.type,
3434+
additionalPropertiesMap.format
3435+
);
3436+
}
3437+
} else {
3438+
throw new Error(`additionalProperties found in ${type}`);
34353439
}
34363440
}
34373441

@@ -3542,35 +3546,39 @@ export class ObjectSerializer {
35423546

35433547
const instance = new typeMap[type]();
35443548
const attributesMap = typeMap[type].getAttributeTypeMap();
3545-
let extraAttributes: any = [];
3546-
if ("additionalProperties" in attributesMap) {
3547-
const attributesBaseNames = Object.keys(attributesMap).reduce(
3548-
(o, key) => Object.assign(o, { [attributesMap[key].baseName]: "" }),
3549-
{}
3550-
);
3551-
extraAttributes = Object.keys(data).filter(
3552-
(key) =>
3553-
!Object.prototype.hasOwnProperty.call(attributesBaseNames, key)
3554-
);
3549+
const attributesBaseNames = Object.keys(attributesMap).reduce(
3550+
(o, key) => Object.assign(o, { [attributesMap[key].baseName]: "" }),
3551+
{}
3552+
);
3553+
const extraAttributes = Object.keys(data).filter(
3554+
(key) => !Object.prototype.hasOwnProperty.call(attributesBaseNames, key)
3555+
);
3556+
3557+
if (extraAttributes.length > 0) {
3558+
if ("additionalProperties" in attributesMap) {
3559+
if (!instance.additionalProperties) {
3560+
instance.additionalProperties = {};
3561+
}
3562+
3563+
const attributeObj = attributesMap["additionalProperties"];
3564+
for (const key in extraAttributes) {
3565+
instance.additionalProperties[extraAttributes[key]] =
3566+
ObjectSerializer.deserialize(
3567+
data[extraAttributes[key]],
3568+
attributeObj.type,
3569+
attributeObj.format
3570+
);
3571+
}
3572+
} else {
3573+
throw new Error(
3574+
`found extra attributes '${extraAttributes}' in ${type}`
3575+
);
3576+
}
35553577
}
35563578

35573579
for (const attributeName in attributesMap) {
35583580
const attributeObj = attributesMap[attributeName];
3559-
if (attributeName == "additionalProperties") {
3560-
if (extraAttributes.length > 0) {
3561-
if (!instance.additionalProperties) {
3562-
instance.additionalProperties = {};
3563-
}
3564-
3565-
for (const key in extraAttributes) {
3566-
instance.additionalProperties[extraAttributes[key]] =
3567-
ObjectSerializer.deserialize(
3568-
data[extraAttributes[key]],
3569-
attributeObj.type,
3570-
attributeObj.format
3571-
);
3572-
}
3573-
}
3581+
if (attributeName === "additionalProperties") {
35743582
continue;
35753583
}
35763584

0 commit comments

Comments
 (0)