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

commonMain.com.algolia.search.dsl.attributes.DSLSearchableAttributes.kt Maven / Gradle / Ivy

package com.algolia.search.dsl.attributes

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

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

    public enum class Modifier {
        Unordered
    }

    public val Unordered: Modifier = Modifier.Unordered

    /**
     * Convenience method.
     */
    public operator fun String.unaryPlus() {
        +Attribute(this)
    }

    /**
     * Convenience method.
     */
    public operator fun Attribute.unaryPlus() {
        +SearchableAttribute.Default(this)
    }

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

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

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

    public companion object : DSL> {

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




© 2015 - 2025 Weber Informatics LLC | Privacy Policy