Skip to content

Commit 45fe259

Browse files
aeneasra-liashenko
authored andcommitted
[rust] resolve discriminator type generation
Closes OpenAPITools#13257
1 parent f20947d commit 45fe259

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

modules/openapi-generator/src/main/resources/rust/model.mustache

+24-3
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ impl Default for {{{classname}}} {
4242
{{#discriminator}}
4343
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
4444
#[serde(tag = "{{{vendorExtensions.x-tag-name}}}")]
45-
pub enum {{{classname}}} {
4645
{{#vendorExtensions}}
46+
pub enum {{{classname}}} {
4747
{{#x-mapped-models}}
4848
#[serde(rename="{{mappingName}}")]
4949
{{{modelName}}} {
@@ -52,13 +52,32 @@ pub enum {{{classname}}} {
5252
/// {{{.}}}
5353
{{/description}}
5454
#[serde(rename = "{{{baseName}}}"{{^required}}, skip_serializing_if = "Option::is_none"{{/required}})]
55-
{{{name}}}: {{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^required}}Option<{{/required}}{{#isEnum}}{{{enumName}}}{{/isEnum}}{{^isEnum}}{{#isModel}}Box<{{{dataType}}}>{{/isModel}}{{^isModel}}{{{dataType}}}{{/isModel}}{{/isEnum}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^required}}>{{/required}},
55+
// {{required}}, {{isNullable}}, {{enumName}}, {{dataType}}, {{isModel}}
56+
{{{name}}}: {{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^required}}Option<{{/required}}{{#isEnum}}{{{classname}}}{{{enumName}}}{{/isEnum}}{{^isEnum}}{{#isModel}}Box<{{{dataType}}}>{{/isModel}}{{^isModel}}{{{dataType}}}{{/isModel}}{{/isEnum}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^required}}>{{/required}},
5657
{{/vars}}
5758
},
5859
{{/x-mapped-models}}
59-
{{/vendorExtensions}}
6060
}
6161

62+
{{!-- for properties within the enums above that are of enum type --}}
63+
{{#x-mapped-models}}
64+
{{#vars}}
65+
{{#isEnum}}
66+
/// {{{description}}}
67+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
68+
pub enum {{{classname}}}{{{enumName}}} {
69+
{{#allowableValues}}
70+
{{#enumVars}}
71+
#[serde(rename = "{{{value}}}")]
72+
{{{name}}},
73+
{{/enumVars}}
74+
{{/allowableValues}}
75+
}
76+
{{/isEnum}}
77+
{{/vars}}
78+
{{/x-mapped-models}}
79+
{{/vendorExtensions}}
80+
6281
{{/discriminator}}
6382

6483
{{!-- for non-enum schemas --}}
@@ -91,6 +110,7 @@ impl {{{classname}}} {
91110
{{/isEnum}}
92111

93112
{{!-- for properties that are of enum type --}}
113+
{{^discriminator}}
94114
{{#vars}}
95115
{{#isEnum}}
96116
/// {{{description}}}
@@ -113,6 +133,7 @@ impl Default for {{{enumName}}} {
113133
}
114134
{{/isEnum}}
115135
{{/vars}}
136+
{{/discriminator}}
116137

117138
{{/model}}
118139
{{/models}}

0 commit comments

Comments
 (0)