package moe.odango.index.utils import io.inbot.eskotlinwrapper.dsl.ESQuery class TermsSetQuery : ESQuery(name = "terms_set") { operator fun set(field: String, value: TermSetConfig) { queryDetails[field] = value.toMap() } operator fun String.invoke(block: TermSetConfig.() -> Unit) { val config = TermSetConfig() block(config) set(this, config) } } fun termsSet(block: TermsSetQuery.() -> Unit): TermsSetQuery { val q = TermsSetQuery() block(q) return q } class TermSetConfig { private val map = mutableMapOf() @Suppress("UNCHECKED_CAST") var terms: Set set(value) { map["terms"] = value as Any } get() = map["terms"] as? Set ?: emptySet() var minimumShouldMatch: Int? get() = map["minimum_should_match_field"] as? Int set(value) { map["minimum_should_match_field"] = value as Any } fun toMap() = map }