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

commonMain.dev.evo.elasticmagic.serde.StdSerializer.kt Maven / Gradle / Ivy

package dev.evo.elasticmagic.serde

abstract class StdSerializer(
    private val objFactory: () -> StdSerializer.ObjectCtx,
    private val arrayFactory: () -> StdSerializer.ArrayCtx,
) : Serializer {

    abstract inner class ObjectCtx(
        protected val map: MutableMap
    ) : Serializer.ObjectCtx {
        fun build(): Map {
            return map.toMap()
        }

        override fun field(name: String, value: Int?) {
            map[name] = value
        }

        override fun field(name: String, value: Long?) {
            map[name] = value
        }

        override fun field(name: String, value: Float?) {
            map[name] = value
        }

        override fun field(name: String, value: Double?) {
            map[name] = value
        }

        override fun field(name: String, value: Boolean?) {
            map[name] = value
        }

        override fun field(name: String, value: String?) {
            map[name] = value
        }

        override fun array(name: String, block: Serializer.ArrayCtx.() -> Unit) {
            map[name] = arrayFactory().apply(block).build()
        }

        override fun obj(name: String, block: Serializer.ObjectCtx.() -> Unit) {
            map[name] = objFactory().apply(block).build()
        }
    }

    abstract inner class ArrayCtx(
        protected val array: MutableList
    ) : Serializer.ArrayCtx {
        fun build(): List {
            return array.toList()
        }

        override fun value(v: Int?) {
            array.add(v)
        }

        override fun value(v: Long?) {
            array.add(v)
        }

        override fun value(v: Float?) {
            array.add(v)
        }

        override fun value(v: Double?) {
            array.add(v)
        }

        override fun value(v: Boolean?) {
            array.add(v)
        }

        override fun value(value: String?) {
            array.add(value)
        }

        override fun array(block: Serializer.ArrayCtx.() -> Unit) {
            array.add(arrayFactory().apply(block).build())
        }

        override fun obj(block: Serializer.ObjectCtx.() -> Unit) {
            array.add(objFactory().apply(block).build())
        }
    }

    override fun obj(block: Serializer.ObjectCtx.() -> Unit): Serializer.ObjectCtx {
        return objFactory().apply(block)
    }

    override fun array(block: Serializer.ArrayCtx.() -> Unit): Serializer.ArrayCtx {
        return arrayFactory().apply(block)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy