From 7ea8b0f9a94c92236241c34c4d4630cb94c352c5 Mon Sep 17 00:00:00 2001 From: Lukas Ruegner Date: Mon, 17 Feb 2025 18:03:58 +0100 Subject: [PATCH] support strict discriminator properties --- .../generator/DefaultSwaggerSchemaGenerationModule.kt | 7 +++++++ .../io/github/smiley4/schemakenerator/swagger/steps.kt | 0 2 files changed, 7 insertions(+) create mode 100644 schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/steps.kt diff --git a/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/generator/DefaultSwaggerSchemaGenerationModule.kt b/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/generator/DefaultSwaggerSchemaGenerationModule.kt index 21c5a885..40f07d72 100644 --- a/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/generator/DefaultSwaggerSchemaGenerationModule.kt +++ b/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/generator/DefaultSwaggerSchemaGenerationModule.kt @@ -9,6 +9,7 @@ import io.github.smiley4.schemakenerator.core.data.TypeData import io.github.smiley4.schemakenerator.core.data.TypeId import io.github.smiley4.schemakenerator.core.data.find import io.github.smiley4.schemakenerator.swagger.SwaggerSchemaUtils +import io.github.smiley4.schemakenerator.swagger.data.SwaggerSchema import io.swagger.v3.oas.models.media.Schema import java.math.BigDecimal @@ -17,6 +18,7 @@ class DefaultSwaggerSchemaGenerationModule( private val nullableAsNonRequired: Boolean, private val allowSpecialFloatingPointValues: Boolean, private val mapsWithStructuredKeysAsArrays: Boolean, + private val strictDiscriminatorProperty: Boolean, ) : SwaggerSchemaGenerationModule { private val schema = SwaggerSchemaUtils() @@ -181,6 +183,11 @@ class DefaultSwaggerSchemaGenerationModule( if (member.nullable) { it.nullable = member.nullable } + if (strictDiscriminatorProperty) { + if (member.annotations.any { annotation -> annotation.name == AbstractAddDiscriminatorStep.MARKER_ANNOTATION_NAME }) { + (it as Schema).enum = listOf(context.typeData.descriptiveName.full) + } + } } val nullable = member.nullable && nullableAsNonRequired val optional = member.optional && optionalAsNonRequired diff --git a/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/steps.kt b/schema-kenerator-swagger/src/main/kotlin/io/github/smiley4/schemakenerator/swagger/steps.kt new file mode 100644 index 00000000..e69de29b