45 lines
1.5 KiB
Kotlin
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()
|
|
}
|