From 0adee9088ae0870c177858c96911877caca42cb0 Mon Sep 17 00:00:00 2001 From: koenlavooij Date: Fri, 4 Apr 2025 23:20:04 +0200 Subject: [PATCH] Use the model where the interface represents the one-of 'root' and the options implement that interface. --- .../openapitools/codegen/languages/KotlinServerCodegen.java | 3 +++ .../src/main/resources/kotlin-server/data_class.mustache | 2 +- .../src/main/resources/kotlin-server/model.mustache | 2 +- .../src/main/resources/kotlin-server/oneof_model.mustache | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server/oneof_model.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 5c85543929d6..96ffec6b67a3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -106,6 +106,9 @@ public class KotlinServerCodegen extends AbstractKotlinCodegen implements BeanVa public KotlinServerCodegen() { super(); + useOneOfInterfaces = true; + addOneOfInterfaceImports = true; + modifyFeatureSet(features -> features .includeDocumentationFeatures(DocumentationFeature.Readme) .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML)) diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index d7c41d201e97..2839559c8c51 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -28,7 +28,7 @@ import java.io.Serializable {{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, {{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}}, {{/-last}}{{/optionalVars}} -){{^isKtor}}{{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}}{{/isKtor}} +){{^isKtor}}{{#vendorExtensions.x-implements}}: {{{.}}}{{/vendorExtensions.x-implements}}{{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}}{{/isKtor}} {{#vendorExtensions.x-has-data-class-body}} { {{/vendorExtensions.x-has-data-class-body}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/model.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/model.mustache index 780dd84b97e0..74b3e9e3b5d4 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/model.mustache @@ -6,6 +6,6 @@ package {{modelPackage}} {{#models}} {{#model}} -{{#isEnum}}{{>enum_class}}{{/isEnum}}{{^isEnum}}{{>data_class}}{{/isEnum}} +{{#isEnum}}{{>enum_class}}{{/isEnum}}{{^isEnum}}{{#oneOf}}{{>oneof_model}}{{/oneOf}}{{^oneOf}}{{>data_class}}{{/oneOf}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/oneof_model.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/oneof_model.mustache new file mode 100644 index 000000000000..8913e08fba6d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server/oneof_model.mustache @@ -0,0 +1,3 @@ +{{#-first}} +interface {{classname}} +{{/-first}}