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

commonMain.com.algolia.search.dsl.ranking.DSLCustomRanking.kt Maven / Gradle / Ivy

package com.algolia.search.dsl.ranking

import com.algolia.search.dsl.DSL
import com.algolia.search.dsl.DSLParameters
import com.algolia.search.model.Attribute
import com.algolia.search.model.settings.CustomRankingCriterion

/**
 * DSL for building a [List] of [CustomRankingCriterion].
 */
@Suppress("PropertyName")
@DSLParameters
public class DSLCustomRanking(
    private val customRankingCriteria: MutableList = mutableListOf()
) {

    public enum class Modifier {
        Asc,
        Desc
    }

    public val Asc: Modifier = Modifier.Asc
    public val Desc: Modifier = Modifier.Desc

    /**
     * Add [this] to [customRankingCriteria].
     */
    public operator fun CustomRankingCriterion.unaryPlus() {
        customRankingCriteria += this
    }

    /**
     * Convenience method.
     */
    public operator fun Modifier.invoke(attribute: String): CustomRankingCriterion {
        return invoke(Attribute(attribute))
    }

    /**
     * Create a [CustomRankingCriterion] using [this] [Modifier] to be applied on [attribute].
     */
    public operator fun Modifier.invoke(attribute: Attribute): CustomRankingCriterion {
        return when (this) {
            Modifier.Asc -> CustomRankingCriterion.Asc(attribute)
            Modifier.Desc -> CustomRankingCriterion.Desc(attribute)
        }
    }

    public companion object : DSL> {

        override operator fun invoke(block: DSLCustomRanking.() -> Unit): List {
            return DSLCustomRanking().apply(block).customRankingCriteria
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy