
com.cedarsoft.commons.ktor.SerializersMap.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ktor-server Show documentation
Show all versions of ktor-server Show documentation
Path: :open:commons:ktor-server
The newest version!
package com.cedarsoft.commons.ktor
import kotlinx.serialization.ImplicitReflectionSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.internal.BooleanSerializer
import kotlinx.serialization.internal.ByteSerializer
import kotlinx.serialization.internal.CharSerializer
import kotlinx.serialization.internal.DoubleSerializer
import kotlinx.serialization.internal.FloatSerializer
import kotlinx.serialization.internal.IntSerializer
import kotlinx.serialization.internal.LongSerializer
import kotlinx.serialization.internal.ShortSerializer
import kotlinx.serialization.internal.StringSerializer
import kotlinx.serialization.internal.UnitSerializer
import kotlinx.serialization.serializer
import kotlin.reflect.KClass
/**
* Contains serializers for their class
*
* @author Johannes Schneider ([[email protected]](mailto:[email protected]))
*/
class SerializersMap {
@Suppress("UNCHECKED_CAST")
private val serializers = mutableMapOf(
Unit::class as KClass to UnitSerializer as KSerializer,
Boolean::class as KClass to BooleanSerializer as KSerializer,
Byte::class as KClass to ByteSerializer as KSerializer,
Short::class as KClass to ShortSerializer as KSerializer,
Int::class as KClass to IntSerializer as KSerializer,
Long::class as KClass to LongSerializer as KSerializer,
Float::class as KClass to FloatSerializer as KSerializer,
Double::class as KClass to DoubleSerializer as KSerializer,
Char::class as KClass to CharSerializer as KSerializer,
String::class as KClass to StringSerializer as KSerializer
)
fun register(type: KClass, serializer: KSerializer) {
@Suppress("UNCHECKED_CAST")
serializers[type as KClass] = serializer as KSerializer
}
inline fun register(serializer: KSerializer) {
register(T::class, serializer)
}
@ImplicitReflectionSerializer
inline fun register() {
register(T::class.serializer())
}
fun getSerializerNullable(type: KClass): KSerializer? {
@Suppress("UNCHECKED_CAST")
return serializers[type as KClass] as KSerializer?
}
fun getSerializer(type: KClass): KSerializer {
return getSerializerNullable(type) ?: throw IllegalStateException("No serializer found for $type")
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy