
commonMain.com.algolia.search.dsl.ranking.DSLRanking.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.RankingCriterion
/**
* DSL for building a [List] of [RankingCriterion].
*/
@Suppress("PropertyName")
@DSLParameters
public class DSLRanking(
private val rankingCriteria: MutableList = mutableListOf()
) {
public enum class Modifier {
Asc,
Desc
}
public val Asc: Modifier = Modifier.Asc
public val Desc: Modifier = Modifier.Desc
public val Typo: RankingCriterion.Typo = RankingCriterion.Typo
public val Geo: RankingCriterion.Geo = RankingCriterion.Geo
public val Words: RankingCriterion.Words = RankingCriterion.Words
public val Filters: RankingCriterion.Filters = RankingCriterion.Filters
public val Proximity: RankingCriterion.Proximity = RankingCriterion.Proximity
public val Attribute: RankingCriterion.Attribute = RankingCriterion.Attribute
public val Exact: RankingCriterion.Exact = RankingCriterion.Exact
public val Custom: RankingCriterion.Custom = RankingCriterion.Custom
/**
* Add [this] to [rankingCriteria].
*/
public operator fun RankingCriterion.unaryPlus() {
rankingCriteria += this
}
/**
* Convenience method.
*/
public operator fun Modifier.invoke(attribute: String): RankingCriterion {
return invoke(Attribute(attribute))
}
/**
* Create a [RankingCriterion] with [this] [Modifier] to be applied on [attribute].
*/
public operator fun Modifier.invoke(attribute: Attribute): RankingCriterion {
return when (this) {
Modifier.Asc -> RankingCriterion.Asc(attribute)
Modifier.Desc -> RankingCriterion.Desc(attribute)
}
}
public companion object : DSL> {
override operator fun invoke(block: DSLRanking.() -> Unit): List {
return DSLRanking().apply(block).rankingCriteria
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy