Skip to content

Commit

Permalink
Added useStrictPrimitiveDecoders
Browse files Browse the repository at this point in the history
  • Loading branch information
sksamuel committed Apr 28, 2024
1 parent 5321e2f commit 25c7974
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@ fun interface Decoder<T> {
}

companion object {

var useStrictPrimitiveDecoders = true

fun decoderFor(type: KType): Decoder<*> {
val decoder: Decoder<*> = when (val classifier = type.classifier) {
String::class -> StringDecoder
Boolean::class -> BooleanDecoder
Float::class -> FloatDecoder
Double::class -> DoubleDecoder
Int::class -> IntDecoder
Long::class -> LongDecoder
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
List::class -> ListDecoder(decoderFor(type.arguments.first().type!!))
Set::class -> SetDecoder(decoderFor(type.arguments.first().type!!))
Map::class -> MapDecoder(decoderFor(type.arguments[1].type!!))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ object IntDecoder : Decoder<Int> {
}
}

object StrictLongDecoder : Decoder<Long> {
override fun decode(schema: Schema): (Any?) -> Long = { it as Long }
}

object LongDecoder : Decoder<Long> {
override fun decode(schema: Schema): (Any?) -> Long {
require(schema.type == Schema.Type.LONG)
Expand All @@ -56,6 +60,10 @@ object LongDecoder : Decoder<Long> {
}
}

object StrictIntDecoder : Decoder<Int> {
override fun decode(schema: Schema): (Any?) -> Int = { it as Int }
}

object DoubleDecoder : Decoder<Double> {
override fun decode(schema: Schema): (Any?) -> Double {
require(schema.type == Schema.Type.DOUBLE)
Expand All @@ -69,6 +77,10 @@ object DoubleDecoder : Decoder<Double> {
}
}

object StrictDoubleDecoder : Decoder<Double> {
override fun decode(schema: Schema): (Any?) -> Double = { it as Double }
}

object FloatDecoder : Decoder<Float> {
override fun decode(schema: Schema): (Any?) -> Float {
require(schema.type == Schema.Type.FLOAT)
Expand All @@ -81,6 +93,10 @@ object FloatDecoder : Decoder<Float> {
}
}

object StrictFloatDecoder : Decoder<Float> {
override fun decode(schema: Schema): (Any?) -> Float = { it as Float }
}

object BooleanDecoder : Decoder<Boolean> {
override fun decode(schema: Schema): (Any?) -> Boolean {
require(schema.type == Schema.Type.BOOLEAN)
Expand All @@ -92,3 +108,7 @@ object BooleanDecoder : Decoder<Boolean> {
}
}
}

object StrictBooleanDecoder : Decoder<Boolean> {
override fun decode(schema: Schema): (Any?) -> Boolean = { it as Boolean }
}

0 comments on commit 25c7974

Please sign in to comment.