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

commonMain.com.caesarealabs.rpc4k.runtime.user.components.JsonFormat.kt Maven / Gradle / Ivy

package com.caesarealabs.rpc4k.runtime.user.components

import com.caesarealabs.rpc4k.runtime.api.SerializationFormat
import com.caesarealabs.rpc4k.runtime.implementation.serializers.Rpc4kSerializersModule
import io.ktor.http.*
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonBuilder
import kotlinx.serialization.json.JsonConfiguration
import kotlinx.serialization.modules.plus


/**
 * [JsonConfiguration.allowStructuredMapKeys] is not supported.
 */
public class JsonFormat(config: JsonBuilder.() -> Unit = {}) : SerializationFormat {
    private val json = Json {
        config()
//        // NiceToHave: Support optional parameters and properties
        encodeDefaults = true
        // This should be done by every format
        serializersModule = Rpc4kSerializersModule + serializersModule
    }

    override val contentType: ContentType = ContentType.Application.Json

    override fun  encode(serializer: SerializationStrategy, value: T): ByteArray {
        return json.encodeToString(serializer, value).encodeToByteArray()
    }

    override fun  decode(serializer: DeserializationStrategy, raw: ByteArray): T {
        return json.decodeFromString(serializer, raw.decodeToString())
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy