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

commonMain.com.algolia.search.dsl.rule.DSLRules.kt Maven / Gradle / Ivy

package com.algolia.search.dsl.rule

import com.algolia.search.dsl.DSL
import com.algolia.search.dsl.DSLParameters
import com.algolia.search.model.Attribute
import com.algolia.search.model.ObjectID
import com.algolia.search.model.rule.AutomaticFacetFilters
import com.algolia.search.model.rule.Condition
import com.algolia.search.model.rule.Consequence
import com.algolia.search.model.rule.Edit
import com.algolia.search.model.rule.FacetOrdering
import com.algolia.search.model.rule.Pattern
import com.algolia.search.model.rule.Promotion
import com.algolia.search.model.rule.RenderingContent
import com.algolia.search.model.rule.Rule
import com.algolia.search.model.rule.TimeRange
import com.algolia.search.model.search.Query
import kotlinx.serialization.json.JsonObject

/**
 * DSL for building a [List] of [Rule].
 */
@Suppress("PropertyName", "FunctionName")
@DSLParameters
public class DSLRules(
    private val rules: MutableList = mutableListOf()
) {

    /**
     * Convenience method.
     */
    public fun Facet(attribute: String): Pattern.Facet {
        return Facet(Attribute(attribute))
    }

    /**
     * Create a [Pattern.Facet] with an [attribute].
     */
    public fun Facet(attribute: Attribute): Pattern.Facet {
        return Pattern.Facet(attribute)
    }

    /**
     * Create a [List] of [Condition] with [DSLConditions].
     */
    public fun conditions(block: DSLConditions.() -> Unit): List {
        return DSLConditions(block)
    }

    /**
     * Create a [List] of [AutomaticFacetFilters] with [DSLAutomaticFacetFilters].
     */
    public fun automaticFacetFilters(block: DSLAutomaticFacetFilters.() -> Unit): List {
        return DSLAutomaticFacetFilters(block)
    }

    /**
     * Create a [List] of [Edit] with [DSLEdits].
     */
    public fun edits(block: DSLEdits.() -> Unit): List {
        return DSLEdits(block)
    }

    /**
     * Create a [List] of [Promotion] with [DSLPromotions].
     */
    public fun promotions(block: DSLPromotions.() -> Unit): List {
        return DSLPromotions(block)
    }

    /**
     * Create a [List] of [TimeRange] with [DSLTimeRanges].
     */
    public fun timeRanges(block: DSLTimeRanges.() -> Unit): List {
        return DSLTimeRanges(block)
    }

    /**
     * Create a [Consequence] with [automaticFacetFilters], [automaticOptionalFacetFilters], [edits], [promote],
     * [userData], [hide], [query]
     */
    public fun consequence(
        automaticFacetFilters: List? = null,
        automaticOptionalFacetFilters: List? = null,
        edits: List? = null,
        promote: List? = null,
        filterPromotes: Boolean? = null,
        userData: JsonObject? = null,
        hide: List? = null,
        query: Query? = null,
        renderingContent: RenderingContent? = null,
    ): Consequence {
        return Consequence(
            automaticFacetFilters = automaticFacetFilters,
            automaticOptionalFacetFilters = automaticOptionalFacetFilters,
            edits = edits,
            promote = promote,
            userData = userData,
            hide = hide,
            query = query,
            filterPromotes = filterPromotes,
            renderingContent = renderingContent
        )
    }

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

    /**
     * Convenience method.
     */
    public fun rule(
        objectID: String,
        conditions: List,
        consequence: Consequence,
        enabled: Boolean? = null,
        validity: List? = null,
        description: String? = null
    ) {
        +Rule(ObjectID(objectID), conditions, consequence, enabled, validity, description)
    }

    /**
     * Create a [Rule] with [objectID], [conditions], [consequence], [enabled], [validity] and [description].
     */
    public fun rule(
        objectID: ObjectID,
        conditions: List,
        consequence: Consequence,
        enabled: Boolean? = null,
        validity: List? = null,
        description: String? = null
    ) {
        +Rule(objectID, conditions, consequence, enabled, validity, description)
    }

    /**
     * Content defining how the search interface should be rendered.
     */
    public fun renderingContent(facetOrdering: FacetOrdering? = null): RenderingContent {
        return RenderingContent(facetOrdering)
    }

    public companion object : DSL> {

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




© 2015 - 2025 Weber Informatics LLC | Privacy Policy