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

commonMain.com.algolia.search.model.multipleindex.BatchOperationIndex.kt Maven / Gradle / Ivy

package com.algolia.search.model.multipleindex

import com.algolia.search.helper.toIndexName
import com.algolia.search.model.IndexName
import com.algolia.search.model.indexing.BatchOperation
import com.algolia.search.serialize.internal.Json
import com.algolia.search.serialize.internal.JsonNonStrict
import com.algolia.search.serialize.internal.Key
import com.algolia.search.serialize.internal.asJsonInput
import com.algolia.search.serialize.internal.asJsonOutput
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive

@Serializable(BatchOperationIndex.Companion::class)
public data class BatchOperationIndex(
    /**
     * [IndexName] targeted by this operation
     */
    val indexName: IndexName,
    /**
     * Type of [BatchOperation] to execute.
     */
    val operation: BatchOperation
) {

    @OptIn(ExperimentalSerializationApi::class)
    @Serializer(BatchOperationIndex::class)
    public companion object : KSerializer {

        override fun serialize(encoder: Encoder, value: BatchOperationIndex) {
            val elements =
                Json.encodeToJsonElement(BatchOperation, value.operation).jsonObject.toMutableMap().also {
                    it[Key.IndexName] = JsonPrimitive(value.indexName.raw)
                }

            encoder.asJsonOutput().encodeJsonElement(JsonObject(elements))
        }

        override fun deserialize(decoder: Decoder): BatchOperationIndex {
            val element = decoder.asJsonInput().jsonObject
            val batchOperation = JsonNonStrict.decodeFromJsonElement(BatchOperation, element)
            val indexName = element.getValue(Key.IndexName).jsonPrimitive.content.toIndexName()

            return BatchOperationIndex(indexName, batchOperation)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy