openapi-nexus 0.1.7

OpenAPI 3.x multi-language code generator
Documentation
package runtime

import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response

class ApiClient(
    private val baseUrl: String,
    private val client: OkHttpClient = OkHttpClient(),
    private val authenticator: Authenticator? = null,
    private val defaultHeaders: Map<String, String> = emptyMap(),
) {
    fun newRequest(
        method: String,
        path: String,
        query: Map<String, String>? = null,
        body: String? = null,
    ): Request {
        val urlBuilder: HttpUrl.Builder = (baseUrl.trimEnd('/') + path).toHttpUrl().newBuilder()
        query?.forEach { (k, v) -> urlBuilder.addQueryParameter(k, v) }

        val requestBody = body?.toRequestBody("application/json".toMediaType())

        val builder = Request.Builder()
            .url(urlBuilder.build())
            .method(method, requestBody)

        defaultHeaders.forEach { (k, v) -> builder.header(k, v) }
        authenticator?.authenticate(builder)

        return builder.build()
    }

    fun execute(request: Request): Response {
        return client.newCall(request).execute()
    }
}