diff --git a/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt b/src/main/kotlin/com/cjbooms/fabrikt/generators/OasDefault.kt index b94ad5c5..83dcb7dd 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 decimalValue: Number) : OasDefault() { + override fun getDefault(): CodeBlock = + CodeBlock.of("%T($decimalValue)", 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