From dbcdeb13d02d2d19bd9e8f9fb9e9797a80238881 Mon Sep 17 00:00:00 2001 From: Conor Gallagher Date: Tue, 6 Aug 2024 00:09:46 +0100 Subject: [PATCH 1/2] Fix BigDecimal defaults. --- .../com/cjbooms/fabrikt/generators/OasDefault.kt | 14 ++++++++++++-- src/test/resources/examples/defaultValues/api.yaml | 3 +++ .../defaultValues/models/PersonWithDefaults.kt | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt b/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt index b94ad5c5..043cc21c 100644 --- a/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt +++ b/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt @@ -5,6 +5,7 @@ import com.cjbooms.fabrikt.util.NormalisedString.toEnumName import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.TypeName +import java.math.BigDecimal import java.net.URI import java.util.Base64 @@ -17,7 +18,12 @@ sealed class OasDefault { CodeBlock.of("%S", strValue) } - data class NumericValue(val numericValue: Number) : OasDefault() { + data class BigDecimalValue(val numericValue: Number) : OasDefault() { + override fun getDefault(): CodeBlock = + CodeBlock.of("%T($numericValue)", BigDecimal::class) + } + + data class NumberValue(val numericValue: Number) : OasDefault() { override fun getDefault(): CodeBlock = CodeBlock.of("%L", numericValue) } @@ -69,7 +75,11 @@ sealed class OasDefault { } } - is Number -> OasDefault.NumericValue(default) + is Number -> + when (typeInfo) { + is KotlinTypeInfo.Numeric -> OasDefault.BigDecimalValue(default) + else -> OasDefault.NumberValue(default) + } is Boolean -> OasDefault.BooleanValue(default) else -> null } diff --git a/src/test/resources/examples/defaultValues/api.yaml b/src/test/resources/examples/defaultValues/api.yaml index aa9c3b15..bf0c8361 100644 --- a/src/test/resources/examples/defaultValues/api.yaml +++ b/src/test/resources/examples/defaultValues/api.yaml @@ -12,6 +12,9 @@ components: integer_default: type: integer default: 18 + decimal_default: + type: number + default: 0.1 enum_default: type: string enum: diff --git a/src/test/resources/examples/defaultValues/models/PersonWithDefaults.kt b/src/test/resources/examples/defaultValues/models/PersonWithDefaults.kt index 40b7bf22..e9150a90 100644 --- a/src/test/resources/examples/defaultValues/models/PersonWithDefaults.kt +++ b/src/test/resources/examples/defaultValues/models/PersonWithDefaults.kt @@ -1,6 +1,7 @@ package examples.defaultValues.models import com.fasterxml.jackson.`annotation`.JsonProperty +import java.math.BigDecimal import java.net.URI import java.util.Base64 import javax.validation.constraints.NotNull @@ -18,6 +19,10 @@ public data class PersonWithDefaults( @get:JsonProperty("integer_default") @get:NotNull public val integerDefault: Int = 18, + @param:JsonProperty("decimal_default") + @get:JsonProperty("decimal_default") + @get:NotNull + public val decimalDefault: BigDecimal = BigDecimal(0.1), @param:JsonProperty("enum_default") @get:JsonProperty("enum_default") @get:NotNull From 98f59e03e8acfb343e3e2c59249d9ae14f82adc0 Mon Sep 17 00:00:00 2001 From: Conor Gallagher Date: Tue, 6 Aug 2024 00:16:09 +0100 Subject: [PATCH 2/2] fix default name --- src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt b/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt index 043cc21c..83dcb7dd 100644 --- a/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt +++ b/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt @@ -18,9 +18,9 @@ sealed class OasDefault { CodeBlock.of("%S", strValue) } - data class BigDecimalValue(val numericValue: Number) : OasDefault() { + data class BigDecimalValue(val decimalValue: Number) : OasDefault() { override fun getDefault(): CodeBlock = - CodeBlock.of("%T($numericValue)", BigDecimal::class) + CodeBlock.of("%T($decimalValue)", BigDecimal::class) } data class NumberValue(val numericValue: Number) : OasDefault() {