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

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

package dev.evo.elasticmagic.serde

interface Serializer {
    interface Ctx {
        fun serialize(): String
    }

    interface ObjectCtx : Ctx {
        fun field(name: String, value: Int?)
        fun fieldIfNotNull(name: String, value: Number?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: Long?)
        fun fieldIfNotNull(name: String, value: Long?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: Float?)
        fun fieldIfNotNull(name: String, value: Float?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: Double?)
        fun fieldIfNotNull(name: String, value: Double?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: Boolean?)
        fun fieldIfNotNull(name: String, value: Boolean?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: String?)
        fun fieldIfNotNull(name: String, value: String?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun field(name: String, value: Any?) {
            when (value) {
                is Int? -> field(name, value)
                is Long? -> field(name, value)
                is Float? -> field(name, value)
                is Double? -> field(name, value)
                is Boolean? -> field(name, value)
                is String? -> field(name, value)
                else -> error(
                    "Unsupported value type: ${if (value != null) value::class else null}"
                )
            }
        }
        fun fieldIfNotNull(name: String, value: Any?) {
            if (value != null) {
                field(name, value)
            }
        }
        fun array(name: String, block: ArrayCtx.() -> Unit)
        fun obj(name: String, block: ObjectCtx.() -> Unit)
    }

    interface ArrayCtx : Ctx {
        fun value(v: Int?)
        fun valueIfNotNull(v: Int?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(v: Long?)
        fun valueIfNotNull(v: Long?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(v: Float?)
        fun valueIfNotNull(v: Float?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(v: Double?)
        fun valueIfNotNull(v: Double?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(v: Boolean?)
        fun valueIfNotNull(v: Boolean?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(value: String?)
        fun valueIfNotNull(v: String?) {
            if (v != null) {
                value(v)
            }
        }
        fun value(v: Any?) {
            when (v) {
                is Int? -> value(v)
                is Long? -> value(v)
                is Float? -> value(v)
                is Double? -> value(v)
                is Boolean? -> value(v)
                is String? -> value(v)
                else -> error(
                    "Unsupported value type: ${if (v != null) v::class else null}"
                )
            }
        }
        fun valueIfNotNull(v: Any?) {
            if (v != null) {
                value(v)
            }
        }
        fun array(block: ArrayCtx.() -> Unit)
        fun obj(block: ObjectCtx.() -> Unit)
    }

    fun obj(block: ObjectCtx.() -> Unit): ObjectCtx

    fun array(block: ArrayCtx.() -> Unit): ArrayCtx
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy