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

commonMain.com.algolia.search.model.internal.request.RequestMultipleQueries.kt Maven / Gradle / Ivy

package com.algolia.search.model.internal.request

import com.algolia.search.model.multipleindex.IndexQuery
import com.algolia.search.model.multipleindex.MultipleQueriesStrategy
import com.algolia.search.serialize.internal.Key
import com.algolia.search.serialize.internal.asJsonOutput
import com.algolia.search.serialize.internal.toJsonNoDefaults
import com.algolia.search.serialize.internal.urlEncode
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.buildJsonArray
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put

@Serializable(RequestMultipleQueries.Companion::class)
internal class RequestMultipleQueries(
    @SerialName(Key.Requests) val indexQueries: List,
    @SerialName(Key.Strategy) val strategy: MultipleQueriesStrategy? = null
) {

    @OptIn(ExperimentalSerializationApi::class)
    @Serializer(RequestMultipleQueries::class)
    companion object : SerializationStrategy {

        override fun serialize(encoder: Encoder, value: RequestMultipleQueries) {
            val json = buildJsonObject {
                put(
                    Key.Requests,
                    buildJsonArray {
                        value.indexQueries.forEach {
                            add(
                                buildJsonObject {
                                    put(Key.IndexName, it.indexName.raw)
                                    it.query.toJsonNoDefaults().urlEncode()?.let { put(Key.Params, it) }
                                }
                            )
                        }
                    }
                )
                value.strategy?.let { put(Key.Strategy, it.raw) }
            }
            encoder.asJsonOutput().encodeJsonElement(json)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy