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 { val multiParamSequence: Sequence> = this.multiParams .params .mapValues { it.value.joinToString(separator = ",") } .map { it.toPair() } .asSequence() val singleParamSequence: Sequence> = 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() }