Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions modules/openapi-generator/src/main/resources/rust/model.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ use serde_repr::{Serialize_repr,Deserialize_repr};
pub enum {{{classname}}} {
{{#allowableValues}}
{{#enumVars}}
{{#-last}}
{{#enumUnknownDefaultCase}}
#[serde(other)]
Comment thread
teovillanueva marked this conversation as resolved.
Resolved
{{/enumUnknownDefaultCase}}
{{/-last}}
{{{name}}} = {{{value}}},
{{/enumVars}}{{/allowableValues}}
}
Expand All @@ -51,6 +56,11 @@ pub enum {{{classname}}} {
{{#allowableValues}}
{{#enumVars}}
#[serde(rename = "{{{value}}}")]
{{#-last}}
{{#enumUnknownDefaultCase}}
#[serde(other)]
{{/enumUnknownDefaultCase}}
{{/-last}}
{{{name}}},
{{/enumVars}}{{/allowableValues}}
}
Expand Down Expand Up @@ -216,6 +226,11 @@ impl Default for {{classname}} {
pub enum {{{enumName}}} {
{{#allowableValues}}
{{#enumVars}}
{{#-last}}
{{#enumUnknownDefaultCase}}
#[serde(other)]
{{/enumUnknownDefaultCase}}
{{/-last}}
{{{name}}} = {{{value}}},
{{/enumVars}}
{{/allowableValues}}
Expand All @@ -240,6 +255,11 @@ pub enum {{{enumName}}} {
{{#allowableValues}}
{{#enumVars}}
#[serde(rename = "{{{value}}}")]
{{#-last}}
{{#enumUnknownDefaultCase}}
#[serde(other)]
{{/enumUnknownDefaultCase}}
{{/-last}}
{{{name}}},
{{/enumVars}}
{{/allowableValues}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -550,4 +550,31 @@ public void testReqwestPathParameterSpaceEncoding() throws IOException {
TestUtils.assertFileContains(Path.of(target.toString(), "/Cargo.toml"), "percent-encoding");
}
}
}

@Test
public void testEnumUnknownDefaultCaseUsesSerdeOther() throws IOException {
Path target = Files.createTempDirectory("test");
target.toFile().deleteOnExit();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("rust")
.addAdditionalProperty(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, true)
.setInputSpec("src/test/resources/3_0/rust/enum-unknown-default-case.yaml")
.setSkipOverwrite(false)
.setOutputDir(target.toAbsolutePath().toString().replace("\\", "/"));
List<File> files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate();
files.forEach(File::deleteOnExit);

// string enum schema
Path petKindPath = Path.of(target.toString(), "/src/models/pet_kind.rs");
TestUtils.assertFileExists(petKindPath);
TestUtils.assertFileContains(petKindPath,
"#[serde(rename = \"unknown_default_open_api\")] #[serde(other)] UnknownDefaultOpenApi,");

// inline string and integer property enums
Path petPath = Path.of(target.toString(), "/src/models/pet.rs");
TestUtils.assertFileExists(petPath);
TestUtils.assertFileContains(petPath,
"#[serde(rename = \"unknown_default_open_api\")] #[serde(other)] UnknownDefaultOpenApi,",
"#[serde(other)] UnknownDefaultOpenApi = 11184809,");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
openapi: 3.0.3
info:
title: Enum unknown default case
version: 1.0.0
paths:
/pets:
get:
operationId: listPets
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
components:
schemas:
Pet:
type: object
required:
- kind
properties:
kind:
$ref: '#/components/schemas/PetKind'
status:
type: string
enum:
- available
- sold
size:
type: integer
enum:
- 1
- 2
PetKind:
type: string
enum:
- cat
- dog
Loading