All Downloads are FREE. Search and download functionalities are using the official Maven repository.

implementations.AbstractJSONEncoderCodec.kt Maven / Gradle / Ivy

There is a newer version: 0.9.24
Show newest version
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
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy