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

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

The newest version!
package com.cedarsoft.commons.ktor

import io.ktor.application.ApplicationCall
import io.ktor.application.call
import io.ktor.content.TextContent
import io.ktor.features.suitableCharset
import io.ktor.http.ContentType
import io.ktor.http.charset
import io.ktor.http.withCharset
import io.ktor.request.ApplicationReceiveRequest
import io.ktor.util.pipeline.PipelineContext
import kotlinx.coroutines.io.*
import kotlinx.coroutines.io.jvm.javaio.*
import kotlinx.serialization.KSerializer
import kotlinx.serialization.UnstableDefault
import kotlinx.serialization.json.Json

class JsonSerializationConverter @UnstableDefault constructor(
  private val json: Json = Json.plain
) : KotlinxSerializationConverter() {
  override suspend fun serialize(
    context: PipelineContext,
    contentType: ContentType,
    value: Any,
    serializer: KSerializer
  ): Any? {
    return TextContent(
      text = json.stringify(serializer, value),
      contentType = ContentType.Application.Json.withCharset(context.call.suitableCharset())
    )
  }

  override suspend fun deserialize(
    context: PipelineContext,
    contentType: ContentType,
    input: ByteReadChannel,
    serializer: KSerializer
  ): Any? {
    val text = input.toInputStream().reader(contentType.charset() ?: Charsets.UTF_8).readText()
    return json.parse(serializer, text)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy