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

commonMain.com.algolia.search.model.synonym.SynonymQuery.kt Maven / Gradle / Ivy

package com.algolia.search.model.synonym

import com.algolia.search.dsl.DSLParameters
import com.algolia.search.serialize.internal.Key
import com.algolia.search.serialize.internal.asJsonOutput
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put

@DSLParameters
@Serializable(SynonymQuery.Companion::class)
public data class SynonymQuery(
    /**
     * Engine default: ""
     * The search query to find synonyms. Use an empty query to browse all the [Synonym] of an index.
     */
    var query: String? = null,
    /**
     * Engine default: 0
     * The page to fetch when browsing through several pages of results. This value is zero-based.
     */
    var page: Int? = null,
    /**
     * Engine default: 100
     * The number of synonyms to return for each call.
     */
    var hitsPerPage: Int? = null,
    /**
     * Engine default: []
     * Restrict the search to a specific [SynonymType].
     */
    var synonymTypes: List? = null
) {

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

        override fun serialize(encoder: Encoder, value: SynonymQuery) {
            val json = buildJsonObject {
                value.query?.let { put(Key.Query, it) }
                value.page?.let { put(Key.Page, it) }
                value.hitsPerPage?.let { put(Key.HitsPerPage, it) }
                value.synonymTypes?.let { types -> put(Key.Type, types.joinToString(",") { it.raw }) }
            }

            encoder.asJsonOutput().encodeJsonElement(json)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy