implementations.AbstractJSONEncoderCodec.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fluid-json-coding Show documentation
Show all versions of fluid-json-coding Show documentation
A JSON library written in pure Kotlin (coding extension)
package com.github.fluidsonic.fluid.json
import java.lang.reflect.ParameterizedType
import kotlin.reflect.KClass
abstract class AbstractJSONEncoderCodec(
private val additionalProviders: List> = emptyList(),
encodableClass: KClass? = null
) : JSONEncoderCodec {
@Suppress("UNCHECKED_CAST")
final override val encodableClass = encodableClass
?: JSONCodingType.of((this::class.java.genericSuperclass as ParameterizedType).actualTypeArguments[0]).rawClass as KClass
override fun decoderCodecForType(decodableType: JSONCodingType): JSONDecoderCodec? {
for (provider in additionalProviders) {
val codec = provider.decoderCodecForType(decodableType)
if (codec != null) {
return codec
}
}
return null
}
override fun encoderCodecForClass(encodableClass: KClass): JSONEncoderCodec? {
var codec = super.encoderCodecForClass(encodableClass)
if (codec != null) {
return codec
}
for (provider in additionalProviders) {
codec = provider.encoderCodecForClass(encodableClass)
if (codec != null) {
return codec
}
}
return null
}
}