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

45 lines
1.5 KiB
Kotlin
Raw Normal View History

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
2020-05-01 13:49:55 +02:00
data class RcdbParams(
val multiParams: MultiParams,
val singleParams: SingleParams,
2020-05-01 13:49:55 +02:00
) {
fun toStrings(): List<String> {
val multiParamSequence: Sequence<Pair<String, String>> = this.multiParams
.params
.mapValues { it.value.joinToString(separator = ",") }
.map { it.toPair() }
2020-05-01 13:49:55 +02:00
.asSequence()
2020-05-01 15:44:45 +02:00
val singleParamSequence: Sequence<Pair<String, String>> = this.singleParams
2020-05-01 13:49:55 +02:00
.params
.asSequence()
.map { it.toPair() }
return singleParamSequence.plus(multiParamSequence)
.map { p -> "${p.first}=${p.second}" }
.toList()
}
}
2020-05-01 15:44:45 +02:00
fun rcdbQuery(body: ParamsCollector.() -> ParamsCollector) =
RcdbUrlQuery("https://www.rcdb.com/r.htm?", rcdbQueryParams(body)).toString()
2020-05-01 13:49:55 +02:00
data class RcdbUrlQuery(val baseUrl: String, val params: RcdbParams) {
override fun toString(): String {
2020-05-01 13:49:55 +02:00
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?
*/
2020-05-01 15:44:45 +02:00
fun rcdbQueryParams(body: ParamsCollector.() -> ParamsCollector): RcdbParams {
val builder = ParamsCollector()
builder.body()
return builder.build()
}