[Kotlin] Introduce support for Kotlin Explicit API Mode for Kotlin-Client generator (resolve #16506) (#19999)

* [Kotlin] Properly document nonPublicApi CLI option

* [Kotlin] Respect parameter name of parent KSerializer to avoid miss-behavior

* [Kotlin] Introduce support for Kotlin Explicit API Mode for Kotlin-Client generator (resolves #16506)
This commit is contained in:
Pavel Sveda
2024-10-30 22:57:47 +01:00
committed by GitHub
parent e9ea12f25a
commit acb16410c4
271 changed files with 5524 additions and 721 deletions

View File

@@ -165,7 +165,7 @@ open class PetApi : ApiClient {
companion object : KSerializer<FindPetsByStatusResponse> {
private val serializer: KSerializer<List<Pet>> = serializer<List<Pet>>()
override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: FindPetsByStatusResponse) = serializer.serialize(encoder, obj.value)
override fun serialize(encoder: Encoder, value: FindPetsByStatusResponse) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = FindPetsByStatusResponse(serializer.deserialize(decoder))
}
}
@@ -208,7 +208,7 @@ open class PetApi : ApiClient {
companion object : KSerializer<FindPetsByTagsResponse> {
private val serializer: KSerializer<List<Pet>> = serializer<List<Pet>>()
override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: FindPetsByTagsResponse) = serializer.serialize(encoder, obj.value)
override fun serialize(encoder: Encoder, value: FindPetsByTagsResponse) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = FindPetsByTagsResponse(serializer.deserialize(decoder))
}
}

View File

@@ -110,7 +110,7 @@ open class StoreApi : ApiClient {
companion object : KSerializer<GetInventoryResponse> {
private val serializer: KSerializer<Map<kotlin.String, kotlin.Int>> = serializer<Map<String, kotlin.Int>>()
override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: GetInventoryResponse) = serializer.serialize(encoder, obj.value)
override fun serialize(encoder: Encoder, value: GetInventoryResponse) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = GetInventoryResponse(serializer.deserialize(decoder))
}
}

View File

@@ -109,7 +109,7 @@ open class UserApi : ApiClient {
companion object : KSerializer<CreateUsersWithArrayInputRequest> {
private val serializer: KSerializer<List<User>> = serializer<List<User>>()
override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: CreateUsersWithArrayInputRequest) = serializer.serialize(encoder, obj.value)
override fun serialize(encoder: Encoder, value: CreateUsersWithArrayInputRequest) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = CreateUsersWithArrayInputRequest(serializer.deserialize(decoder))
}
}
@@ -149,7 +149,7 @@ open class UserApi : ApiClient {
companion object : KSerializer<CreateUsersWithListInputRequest> {
private val serializer: KSerializer<List<User>> = serializer<List<User>>()
override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: CreateUsersWithListInputRequest) = serializer.serialize(encoder, obj.value)
override fun serialize(encoder: Encoder, value: CreateUsersWithListInputRequest) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = CreateUsersWithListInputRequest(serializer.deserialize(decoder))
}
}

View File

@@ -2,7 +2,7 @@ package org.openapitools.client.infrastructure
typealias MultiValueMap = MutableMap<String,List<String>>
fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) {
fun collectionDelimiter(collectionFormat: String): String = when(collectionFormat) {
"csv" -> ","
"tsv" -> "\t"
"pipe" -> "|"
@@ -12,7 +12,7 @@ fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) {
val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" }
fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter)
fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String>
= toMultiValue(items.asIterable(), collectionFormat, map)
fun <T : Any?> toMultiValue(items: Iterable<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String> {

View File

@@ -56,13 +56,13 @@ open class ApiClient(
}
companion object {
const val BASE_URL = "http://petstore.swagger.io/v2"
val JSON_DEFAULT = Json {
const val BASE_URL: String = "http://petstore.swagger.io/v2"
val JSON_DEFAULT: Json = Json {
ignoreUnknownKeys = true
prettyPrint = true
isLenient = true
}
protected val UNSAFE_HEADERS = listOf(HttpHeaders.ContentType)
protected val UNSAFE_HEADERS: List<String> = listOf(HttpHeaders.ContentType)
}
/**

View File

@@ -7,9 +7,9 @@ import kotlinx.serialization.encoding.*
@Serializable(Base64ByteArray.Companion::class)
class Base64ByteArray(val value: ByteArray) {
companion object : KSerializer<Base64ByteArray> {
override val descriptor = PrimitiveSerialDescriptor("Base64ByteArray", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, obj: Base64ByteArray) = encoder.encodeString(obj.value.encodeBase64())
override fun deserialize(decoder: Decoder) = Base64ByteArray(decoder.decodeString().decodeBase64Bytes())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Base64ByteArray", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Base64ByteArray): Unit = encoder.encodeString(value.value.encodeBase64())
override fun deserialize(decoder: Decoder): Base64ByteArray = Base64ByteArray(decoder.decodeString().decodeBase64Bytes())
}
override fun equals(other: Any?): Boolean {

View File

@@ -7,9 +7,9 @@ import kotlinx.serialization.encoding.*
@Serializable(OctetByteArray.Companion::class)
class OctetByteArray(val value: ByteArray) {
companion object : KSerializer<OctetByteArray> {
override val descriptor = PrimitiveSerialDescriptor("OctetByteArray", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, obj: OctetByteArray) = encoder.encodeString(hex(obj.value))
override fun deserialize(decoder: Decoder) = OctetByteArray(hex(decoder.decodeString()))
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("OctetByteArray", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: OctetByteArray): Unit = encoder.encodeString(hex(value.value))
override fun deserialize(decoder: Decoder): OctetByteArray = OctetByteArray(hex(decoder.decodeString()))
}
override fun equals(other: Any?): Boolean {