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

com.cedarsoft.commons.ktor.SerializersMap.kt Maven / Gradle / Ivy

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