Skip to content

Commit 6c714dd

Browse files
eriktimmacjohnny
authored andcommitted
[typescript-fetch] Add (de)serializers for oneOfs (#4387)
1 parent d9e93ce commit 6c714dd

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import {
33
{{#imports}}
44
{{{.}}},
55
{{/imports}}
6+
{{#oneOf}}
7+
{{{.}}}FromJSONTyped,
8+
{{{.}}}ToJSON,
9+
{{/oneOf}}
610
} from './';
711

812
{{/hasImports}}
@@ -11,4 +15,49 @@ import {
1115
* {{{description}}}{{/description}}
1216
* @export
1317
*/
14-
export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}};
18+
export type {{classname}} = {{#discriminator}}{{#mappedModels}}{ {{discriminator.propertyName}}: '{{mappingName}}' } & {{modelName}}{{^-last}} | {{/-last}}{{/mappedModels}}{{/discriminator}}{{^discriminator}}{{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}}{{/discriminator}};
19+
20+
export function {{classname}}FromJSON(json: any): {{classname}} {
21+
return {{classname}}FromJSONTyped(json, false);
22+
}
23+
24+
export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boolean): {{classname}} {
25+
if ((json === undefined) || (json === null)) {
26+
return json;
27+
}
28+
{{#discriminator}}
29+
switch (json['{{discriminator.propertyName}}']) {
30+
{{#discriminator.mappedModels}}
31+
case '{{mappingName}}':
32+
return {...{{modelName}}FromJSONTyped(json, true), {{discriminator.propertyName}}: '{{mappingName}}'};
33+
{{/discriminator.mappedModels}}
34+
default:
35+
throw new Error(`No variant of {{classname}} exists with '{{discriminator.propertyName}}=${json['{{discriminator.propertyName}}']}'`);
36+
}
37+
{{/discriminator}}
38+
{{^discriminator}}
39+
return { {{#oneOf}}...{{{.}}}FromJSONTyped(json, true){{^-last}}, {{/-last}}{{/oneOf}} };
40+
{{/discriminator}}
41+
}
42+
43+
export function {{classname}}ToJSON(value?: {{classname}} | null): any {
44+
if (value === undefined) {
45+
return undefined;
46+
}
47+
if (value === null) {
48+
return null;
49+
}
50+
{{#discriminator}}
51+
switch (value['{{discriminator.propertyName}}']) {
52+
{{#discriminator.mappedModels}}
53+
case '{{mappingName}}':
54+
return {{modelName}}ToJSON(value);
55+
{{/discriminator.mappedModels}}
56+
default:
57+
throw new Error(`No variant of {{classname}} exists with '{{discriminator.propertyName}}=${value['{{discriminator.propertyName}}']}'`);
58+
}
59+
{{/discriminator}}
60+
{{^discriminator}}
61+
return { {{#oneOf}}...{{{.}}}ToJSON(value){{^-last}}, {{/-last}}{{/oneOf}} };
62+
{{/discriminator}}
63+
}

0 commit comments

Comments
 (0)