rcdbquery/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt

45 lines
1.5 KiB
Kotlin

package de.pheerai.rcdbquery.dsl
import de.pheerai.rcdbquery.dsl.params.MultiParams
import de.pheerai.rcdbquery.dsl.params.ParamsCollector
import de.pheerai.rcdbquery.dsl.params.SingleParams
data class RcdbParams(
val multiParams: MultiParams,
val singleParams: SingleParams,
) {
fun toStrings(): List<String> {
val multiParamSequence: Sequence<Pair<String, String>> = this.multiParams
.params
.mapValues { it.value.joinToString(separator = ",") }
.map { it.toPair() }
.asSequence()
val singleParamSequence: Sequence<Pair<String, String>> = this.singleParams
.params
.asSequence()
.map { it.toPair() }
return singleParamSequence.plus(multiParamSequence)
.map { p -> "${p.first}=${p.second}" }
.toList()
}
}
fun rcdbQuery(body: ParamsCollector.() -> ParamsCollector) =
RcdbUrlQuery("https://www.rcdb.com/r.htm?", rcdbQueryParams(body)).toString()
data class RcdbUrlQuery(val baseUrl: String, val params: RcdbParams) {
override fun toString(): String {
return params.toStrings()
.joinToString(prefix = baseUrl, separator = "&")
}
}
/**
* Builder for the parameters only (mainly because it might be possilbe in the future to have an API with a POST search object?
*/
fun rcdbQueryParams(body: ParamsCollector.() -> ParamsCollector): RcdbParams {
val builder = ParamsCollector()
builder.body()
return builder.build()
}