2020-04-08 15:56:19 +02:00
|
|
|
package de.pheerai.rcdbquery.dsl
|
|
|
|
|
2020-08-23 23:11:41 +02:00
|
|
|
import de.pheerai.rcdbquery.dsl.params.MultiParams
|
|
|
|
import de.pheerai.rcdbquery.dsl.params.ParamsCollector
|
|
|
|
import de.pheerai.rcdbquery.dsl.params.SingleParams
|
2020-04-08 15:56:19 +02:00
|
|
|
|
2020-05-01 13:49:55 +02:00
|
|
|
data class RcdbParams(
|
|
|
|
val multiParams: MultiParams,
|
2020-08-23 23:11:41 +02:00
|
|
|
val singleParams: SingleParams,
|
2020-05-01 13:49:55 +02:00
|
|
|
) {
|
|
|
|
fun toStrings(): List<String> {
|
|
|
|
val multiParamSequence: Sequence<Pair<String, String>> = this.multiParams
|
|
|
|
.params
|
2020-08-23 23:11:41 +02:00
|
|
|
.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) =
|
2020-04-08 15:56:19 +02:00
|
|
|
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) {
|
2020-04-08 15:56:19 +02:00
|
|
|
override fun toString(): String {
|
2020-05-01 13:49:55 +02:00
|
|
|
return params.toStrings()
|
2020-04-08 15:56:19 +02:00
|
|
|
.joinToString(prefix = baseUrl, separator = "&")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-19 13:18:17 +02:00
|
|
|
/**
|
|
|
|
* 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()
|
2020-04-08 15:56:19 +02:00
|
|
|
builder.body()
|
|
|
|
return builder.build()
|
|
|
|
}
|