From 9ddb439d4ade9ea48950405a6b2cf7dd9295591c Mon Sep 17 00:00:00 2001 From: sksamuel Date: Sun, 28 Apr 2024 13:12:42 -0500 Subject: [PATCH] Moved useStrictPrimitiveDecoders check to decode step --- .../centurion/avro/decoders/Decoder.kt | 16 ++++++------ .../centurion/avro/decoders/primitives.kt | 25 ++++--------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/Decoder.kt b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/Decoder.kt index 838fed2..8d509bf 100644 --- a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/Decoder.kt +++ b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/Decoder.kt @@ -33,14 +33,16 @@ fun interface Decoder { fun decoderFor(type: KType): Decoder<*> { val decoder: Decoder<*> = when (val classifier = type.classifier) { String::class -> StringDecoder - Boolean::class -> if (useStrictPrimitiveDecoders) StrictBooleanDecoder else BooleanDecoder - Float::class -> if (useStrictPrimitiveDecoders) StrictFloatDecoder else FloatDecoder - Double::class -> if (useStrictPrimitiveDecoders) StrictDoubleDecoder else DoubleDecoder - Int::class -> if (useStrictPrimitiveDecoders) StrictIntDecoder else IntDecoder - Long::class -> if (useStrictPrimitiveDecoders) StrictLongDecoder else LongDecoder + Boolean::class -> BooleanDecoder + Float::class -> FloatDecoder + Double::class -> DoubleDecoder + Int::class -> IntDecoder + Long::class -> LongDecoder + Byte::class -> ByteDecoder + Short::class -> ShortDecoder List::class -> ListDecoder(decoderFor(type.arguments.first().type!!)) - LongArray::class -> LongArrayDecoder(if (useStrictPrimitiveDecoders) StrictLongDecoder else LongDecoder) - IntArray::class -> IntArrayDecoder(if (useStrictPrimitiveDecoders) StrictIntDecoder else IntDecoder) + LongArray::class -> LongArrayDecoder(LongDecoder) + IntArray::class -> IntArrayDecoder(IntDecoder) Set::class -> SetDecoder(decoderFor(type.arguments.first().type!!)) Map::class -> MapDecoder(decoderFor(type.arguments[1].type!!)) LocalTime::class -> LocalTimeDecoder diff --git a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/primitives.kt b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/primitives.kt index e076c27..d102a8e 100644 --- a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/primitives.kt +++ b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/decoders/primitives.kt @@ -30,6 +30,7 @@ object ShortDecoder : Decoder { object IntDecoder : Decoder { override fun decode(schema: Schema): (Any?) -> Int { require(schema.type == Schema.Type.INT) + if (Decoder.useStrictPrimitiveDecoders) return { it as Int } return { value -> when (value) { is Int -> value @@ -41,13 +42,10 @@ object IntDecoder : Decoder { } } -object StrictLongDecoder : Decoder { - override fun decode(schema: Schema): (Any?) -> Long = { it as Long } -} - object LongDecoder : Decoder { override fun decode(schema: Schema): (Any?) -> Long { require(schema.type == Schema.Type.LONG) + if (Decoder.useStrictPrimitiveDecoders) return { it as Long } return { value -> when (value) { is Long -> value @@ -60,13 +58,10 @@ object LongDecoder : Decoder { } } -object StrictIntDecoder : Decoder { - override fun decode(schema: Schema): (Any?) -> Int = { it as Int } -} - object DoubleDecoder : Decoder { override fun decode(schema: Schema): (Any?) -> Double { require(schema.type == Schema.Type.DOUBLE) + if (Decoder.useStrictPrimitiveDecoders) return { it as Double } return { value -> when (value) { is Double -> value @@ -77,13 +72,10 @@ object DoubleDecoder : Decoder { } } -object StrictDoubleDecoder : Decoder { - override fun decode(schema: Schema): (Any?) -> Double = { it as Double } -} - object FloatDecoder : Decoder { override fun decode(schema: Schema): (Any?) -> Float { require(schema.type == Schema.Type.FLOAT) + if (Decoder.useStrictPrimitiveDecoders) return { it as Float } return { value -> when (value) { is Float -> value @@ -93,13 +85,10 @@ object FloatDecoder : Decoder { } } -object StrictFloatDecoder : Decoder { - override fun decode(schema: Schema): (Any?) -> Float = { it as Float } -} - object BooleanDecoder : Decoder { override fun decode(schema: Schema): (Any?) -> Boolean { require(schema.type == Schema.Type.BOOLEAN) + if (Decoder.useStrictPrimitiveDecoders) return { it as Boolean } return { value -> when (value) { is Boolean -> value @@ -108,7 +97,3 @@ object BooleanDecoder : Decoder { } } } - -object StrictBooleanDecoder : Decoder { - override fun decode(schema: Schema): (Any?) -> Boolean = { it as Boolean } -}