[kotlin-client][multiplatform] HttpClient can now be passed as an argument to ApiClient (#16343)

* [kotli-client][multiplatform] Added to inject HttpClient into the argument of ApiClient

* [kotlin-client][multiplatform] update generated samples
This commit is contained in:
YusukeOba 2023-08-19 18:05:11 +09:00 committed by GitHub
parent ff19825610
commit 141b3d4e0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 203 additions and 92 deletions

View File

@ -5,6 +5,7 @@ package {{apiPackage}}
{{/imports}} {{/imports}}
import {{packageName}}.infrastructure.* import {{packageName}}.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -15,12 +16,19 @@ import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}open class {{classname}}( {{#nonPublicApi}}internal {{/nonPublicApi}}open class {{classname}} : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
{{#operation}} {{#operation}}
{{#allParams}} {{#allParams}}

View File

@ -19,21 +19,32 @@ import kotlinx.serialization.json.Json
import {{packageName}}.auth.* import {{packageName}}.auth.*
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient( {{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient(
private val baseUrl: String, private val baseUrl: String
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
private val jsonBlock: Json
) { ) {
private val clientConfig: (HttpClientConfig<*>) -> Unit by lazy { private lateinit var client: HttpClient
constructor(
baseUrl: String,
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonBlock: Json,
) : this(baseUrl = baseUrl) {
val clientConfig: (HttpClientConfig<*>) -> Unit by lazy {
{ {
it.install(ContentNegotiation) { json(jsonBlock) } it.install(ContentNegotiation) { json(jsonBlock) }
httpClientConfig?.invoke(it) httpClientConfig?.invoke(it)
} }
} }
private val client: HttpClient by lazy { client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) }
constructor(
baseUrl: String,
httpClient: HttpClient
): this(baseUrl = baseUrl) {
this.client = httpClient
} }
{{#hasAuthMethods}} {{#hasAuthMethods}}

View File

@ -17,6 +17,7 @@ package org.openapitools.client.apis
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -26,12 +27,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class DefaultApi( open class DefaultApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* *

View File

@ -19,21 +19,32 @@ import kotlinx.serialization.json.Json
import org.openapitools.client.auth.* import org.openapitools.client.auth.*
open class ApiClient( open class ApiClient(
private val baseUrl: String, private val baseUrl: String
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
private val jsonBlock: Json
) { ) {
private val clientConfig: (HttpClientConfig<*>) -> Unit by lazy { private lateinit var client: HttpClient
constructor(
baseUrl: String,
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonBlock: Json,
) : this(baseUrl = baseUrl) {
val clientConfig: (HttpClientConfig<*>) -> Unit by lazy {
{ {
it.install(ContentNegotiation) { json(jsonBlock) } it.install(ContentNegotiation) { json(jsonBlock) }
httpClientConfig?.invoke(it) httpClientConfig?.invoke(it)
} }
} }
private val client: HttpClient by lazy { client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) }
constructor(
baseUrl: String,
httpClient: HttpClient
): this(baseUrl = baseUrl) {
this.client = httpClient
} }
private val authentications: kotlin.collections.Map<String, Authentication>? = null private val authentications: kotlin.collections.Map<String, Authentication>? = null

View File

@ -18,6 +18,7 @@ package org.openapitools.client.apis
import org.openapitools.client.models.Apa import org.openapitools.client.models.Apa
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -27,12 +28,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class DefaultApi( open class DefaultApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* *

View File

@ -19,21 +19,32 @@ import kotlinx.serialization.json.Json
import org.openapitools.client.auth.* import org.openapitools.client.auth.*
open class ApiClient( open class ApiClient(
private val baseUrl: String, private val baseUrl: String
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
private val jsonBlock: Json
) { ) {
private val clientConfig: (HttpClientConfig<*>) -> Unit by lazy { private lateinit var client: HttpClient
constructor(
baseUrl: String,
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonBlock: Json,
) : this(baseUrl = baseUrl) {
val clientConfig: (HttpClientConfig<*>) -> Unit by lazy {
{ {
it.install(ContentNegotiation) { json(jsonBlock) } it.install(ContentNegotiation) { json(jsonBlock) }
httpClientConfig?.invoke(it) httpClientConfig?.invoke(it)
} }
} }
private val client: HttpClient by lazy { client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) }
constructor(
baseUrl: String,
httpClient: HttpClient
): this(baseUrl = baseUrl) {
this.client = httpClient
} }
private val authentications: kotlin.collections.Map<String, Authentication>? = null private val authentications: kotlin.collections.Map<String, Authentication>? = null

0
samples/client/petstore/kotlin-default-values-multiplatform/gradlew vendored Normal file → Executable file
View File

View File

@ -17,6 +17,7 @@ package org.openapitools.client.apis
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -26,12 +27,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class DefaultApi( open class DefaultApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* Tests default values * Tests default values

View File

@ -19,21 +19,32 @@ import kotlinx.serialization.json.Json
import org.openapitools.client.auth.* import org.openapitools.client.auth.*
open class ApiClient( open class ApiClient(
private val baseUrl: String, private val baseUrl: String
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
private val jsonBlock: Json
) { ) {
private val clientConfig: (HttpClientConfig<*>) -> Unit by lazy { private lateinit var client: HttpClient
constructor(
baseUrl: String,
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonBlock: Json,
) : this(baseUrl = baseUrl) {
val clientConfig: (HttpClientConfig<*>) -> Unit by lazy {
{ {
it.install(ContentNegotiation) { json(jsonBlock) } it.install(ContentNegotiation) { json(jsonBlock) }
httpClientConfig?.invoke(it) httpClientConfig?.invoke(it)
} }
} }
private val client: HttpClient by lazy { client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) }
constructor(
baseUrl: String,
httpClient: HttpClient
): this(baseUrl = baseUrl) {
this.client = httpClient
} }
private val authentications: kotlin.collections.Map<String, Authentication>? = null private val authentications: kotlin.collections.Map<String, Authentication>? = null

View File

@ -19,6 +19,7 @@ import org.openapitools.client.models.ModelApiResponse
import org.openapitools.client.models.Pet import org.openapitools.client.models.Pet
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -28,12 +29,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class PetApi( open class PetApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* Add a new pet to the store * Add a new pet to the store

View File

@ -18,6 +18,7 @@ package org.openapitools.client.apis
import org.openapitools.client.models.Order import org.openapitools.client.models.Order
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -27,12 +28,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class StoreApi( open class StoreApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* Delete purchase order by ID * Delete purchase order by ID

View File

@ -18,6 +18,7 @@ package org.openapitools.client.apis
import org.openapitools.client.models.User import org.openapitools.client.models.User
import org.openapitools.client.infrastructure.* import org.openapitools.client.infrastructure.*
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClientConfig
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.HttpClientEngine
@ -27,12 +28,19 @@ import kotlinx.serialization.*
import kotlinx.serialization.descriptors.* import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
open class UserApi( open class UserApi : ApiClient {
constructor(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonSerializer: Json = ApiClient.JSON_DEFAULT jsonSerializer: Json = ApiClient.JSON_DEFAULT
) : ApiClient(baseUrl, httpClientEngine, httpClientConfig, jsonSerializer) { ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor(
baseUrl: String,
httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient)
/** /**
* Create user * Create user

View File

@ -19,21 +19,32 @@ import kotlinx.serialization.json.Json
import org.openapitools.client.auth.* import org.openapitools.client.auth.*
open class ApiClient( open class ApiClient(
private val baseUrl: String, private val baseUrl: String
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
private val jsonBlock: Json
) { ) {
private val clientConfig: (HttpClientConfig<*>) -> Unit by lazy { private lateinit var client: HttpClient
constructor(
baseUrl: String,
httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
jsonBlock: Json,
) : this(baseUrl = baseUrl) {
val clientConfig: (HttpClientConfig<*>) -> Unit by lazy {
{ {
it.install(ContentNegotiation) { json(jsonBlock) } it.install(ContentNegotiation) { json(jsonBlock) }
httpClientConfig?.invoke(it) httpClientConfig?.invoke(it)
} }
} }
private val client: HttpClient by lazy { client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) }
constructor(
baseUrl: String,
httpClient: HttpClient
): this(baseUrl = baseUrl) {
this.client = httpClient
} }
private val authentications: kotlin.collections.Map<String, Authentication> by lazy { private val authentications: kotlin.collections.Map<String, Authentication> by lazy {