[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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
271 changed files with 5524 additions and 721 deletions

View File

@ -20,6 +20,7 @@ jobs:
sample: sample:
# client # client
- samples/client/petstore/kotlin - samples/client/petstore/kotlin
- samples/client/petstore/kotlin-explicit
- samples/client/petstore/kotlin-gson - samples/client/petstore/kotlin-gson
- samples/client/petstore/kotlin-jackson - samples/client/petstore/kotlin-jackson
- samples/client/petstore/kotlin-model-prefix-type-mappings - samples/client/petstore/kotlin-model-prefix-type-mappings

View File

@ -0,0 +1,7 @@
generatorName: kotlin
outputDir: samples/client/petstore/kotlin-explicit
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/kotlin-client
additionalProperties:
artifactId: kotlin-petstore-explicit
explicitApi: "true"

View File

@ -25,6 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|collectionType|Option. Collection type to use|<dl><dt>**array**</dt><dd>kotlin.Array</dd><dt>**list**</dt><dd>kotlin.collections.List</dd></dl>|list| |collectionType|Option. Collection type to use|<dl><dt>**array**</dt><dd>kotlin.Array</dd><dt>**list**</dt><dd>kotlin.collections.List</dd></dl>|list|
|dateLibrary|Option. Date library to use|<dl><dt>**threetenbp-localdatetime**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, for legacy app only)</dd><dt>**kotlinx-datetime**</dt><dd>kotlinx-datetime (preferred for multiplatform)</dd><dt>**string**</dt><dd>String</dd><dt>**java8-localdatetime**</dt><dd>Java 8 native JSR310 (jvm only, for legacy app only)</dd><dt>**java8**</dt><dd>Java 8 native JSR310 (jvm only, preferred for jdk 1.8+)</dd><dt>**threetenbp**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, preferred for jdk &lt; 1.8)</dd></dl>|java8| |dateLibrary|Option. Date library to use|<dl><dt>**threetenbp-localdatetime**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, for legacy app only)</dd><dt>**kotlinx-datetime**</dt><dd>kotlinx-datetime (preferred for multiplatform)</dd><dt>**string**</dt><dd>String</dd><dt>**java8-localdatetime**</dt><dd>Java 8 native JSR310 (jvm only, for legacy app only)</dd><dt>**java8**</dt><dd>Java 8 native JSR310 (jvm only, preferred for jdk 1.8+)</dd><dt>**threetenbp**</dt><dd>Threetenbp - Backport of JSR310 (jvm only, preferred for jdk &lt; 1.8)</dd></dl>|java8|
|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original|
|explicitApi|Generates code with explicit access modifiers to comply with Kotlin Explicit API Mode.| |false|
|failOnUnknownProperties|Fail Jackson de-serialization on unknown properties| |false| |failOnUnknownProperties|Fail Jackson de-serialization on unknown properties| |false|
|generateOneOfAnyOfWrappers|Generate oneOf, anyOf schemas as wrappers.| |false| |generateOneOfAnyOfWrappers|Generate oneOf, anyOf schemas as wrappers.| |false|
|generateRoomModels|Generate Android Room database models in addition to API models (JVM Volley library only)| |false| |generateRoomModels|Generate Android Room database models in addition to API models (JVM Volley library only)| |false|
@ -34,6 +35,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|mapFileBinaryToByteArray|Map File and Binary to ByteArray (default: false)| |false| |mapFileBinaryToByteArray|Map File and Binary to ByteArray (default: false)| |false|
|modelMutable|Create mutable models| |false| |modelMutable|Create mutable models| |false|
|moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false| |moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false|
|nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.| |false|
|nullableReturnType|Nullable return type| |false| |nullableReturnType|Nullable return type| |false|
|omitGradlePluginVersions|Whether to declare Gradle plugin versions in build files.| |false| |omitGradlePluginVersions|Whether to declare Gradle plugin versions in build files.| |false|
|omitGradleWrapper|Whether to omit Gradle wrapper for creating a sub project.| |false| |omitGradleWrapper|Whether to omit Gradle wrapper for creating a sub project.| |false|

View File

@ -90,6 +90,7 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
public static final String MOSHI_CODE_GEN = "moshiCodeGen"; public static final String MOSHI_CODE_GEN = "moshiCodeGen";
public static final String EXPLICIT_API = "explicitApi";
public static final String NULLABLE_RETURN_TYPE = "nullableReturnType"; public static final String NULLABLE_RETURN_TYPE = "nullableReturnType";
public static final String SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW = "supportAndroidApiLevel25AndBelow"; public static final String SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW = "supportAndroidApiLevel25AndBelow";
@ -268,6 +269,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.")); cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info."));
cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", false)); cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", false));
cliOptions.add(CliOption.newBoolean(EXPLICIT_API, "Generates code with explicit access modifiers to comply with Kotlin Explicit API Mode."));
cliOptions.add(CliOption.newBoolean(CodegenConstants.NON_PUBLIC_API, CodegenConstants.NON_PUBLIC_API_DESC));
cliOptions.add(CliOption.newBoolean(NULLABLE_RETURN_TYPE, "Nullable return type")); cliOptions.add(CliOption.newBoolean(NULLABLE_RETURN_TYPE, "Nullable return type"));
cliOptions.add(CliOption.newBoolean(GENERATE_ROOM_MODELS, "Generate Android Room database models in addition to API models (JVM Volley library only)", false)); cliOptions.add(CliOption.newBoolean(GENERATE_ROOM_MODELS, "Generate Android Room database models in addition to API models (JVM Volley library only)", false));

View File

@ -71,7 +71,7 @@ import java.io.IOException
@Deprecated(message = "This schema is deprecated.") @Deprecated(message = "This schema is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
{{>additionalModelTypeAnnotations}} {{>additionalModelTypeAnnotations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) {
class CustomTypeAdapterFactory : TypeAdapterFactory { class CustomTypeAdapterFactory : TypeAdapterFactory {
override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? { override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {

View File

@ -99,6 +99,11 @@ idea {
} }
} }
{{/idea}} {{/idea}}
{{#explicitApi}}
kotlin {
explicitApi()
}
{{/explicitApi}}
{{#jvm-spring-webclient}}{{#useSpringBoot3}} {{#jvm-spring-webclient}}{{#useSpringBoot3}}
kotlin { kotlin {
jvmToolchain { jvmToolchain {

View File

@ -77,7 +77,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
{{#vendorExtensions.x-class-extra-annotation}} {{#vendorExtensions.x-class-extra-annotation}}
{{{vendorExtensions.x-class-extra-annotation}}} {{{vendorExtensions.x-class-extra-annotation}}}
{{/vendorExtensions.x-class-extra-annotation}} {{/vendorExtensions.x-class-extra-annotation}}
{{#nonPublicApi}}internal {{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}{{#hasVars}}data {{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} ( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}{{#hasVars}}data {{/hasVars}}class{{/discriminator}} {{classname}}{{^discriminator}} (
{{#allVars}} {{#allVars}}
{{#required}}{{>data_class_req_var}}{{/required}}{{^required}}{{>data_class_opt_var}}{{/required}}{{^-last}},{{/-last}} {{#required}}{{>data_class_req_var}}{{/required}}{{^required}}{{>data_class_opt_var}}{{/required}}{{^-last}},{{/-last}}
@ -94,7 +94,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
){{/discriminator}} ){{/discriminator}}
{{/generateRoomModels}} {{/generateRoomModels}}
{{#serializableModel}} {{#serializableModel}}
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private const val serialVersionUID: Long = 123 private const val serialVersionUID: Long = 123
} }
{{/serializableModel}} {{/serializableModel}}
@ -120,7 +120,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
{{#multiplatform}} {{#multiplatform}}
@Serializable @Serializable
{{/multiplatform}} {{/multiplatform}}
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInPascalCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
{{^multiplatform}} {{^multiplatform}}

View File

@ -39,7 +39,7 @@ import kotlinx.serialization.*
@JsonClass(generateAdapter = false) @JsonClass(generateAdapter = false)
{{/moshi}} {{/moshi}}
{{/multiplatform}} {{/multiplatform}}
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{classname}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{{dataType}}}) {
{{#allowableValues}}{{#enumVars}} {{#allowableValues}}{{#enumVars}}
{{^multiplatform}} {{^multiplatform}}
{{#moshi}} {{#moshi}}
@ -79,16 +79,16 @@ import kotlinx.serialization.*
*/ */
override fun toString(): kotlin.String = value{{^isString}}.toString(){{/isString}} override fun toString(): kotlin.String = value{{^isString}}.toString(){{/isString}}
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
/** /**
* Converts the provided [data] to a [String] on success, null otherwise. * Converts the provided [data] to a [String] on success, null otherwise.
*/ */
fun encode(data: kotlin.Any?): kotlin.String? = if (data is {{classname}}) "$data" else null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun encode(data: kotlin.Any?): kotlin.String? = if (data is {{classname}}) "$data" else null
/** /**
* Returns a valid [{{classname}}] for [data], null otherwise. * Returns a valid [{{classname}}] for [data], null otherwise.
*/ */
fun decode(data: kotlin.Any?): {{classname}}? = data?.let { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun decode(data: kotlin.Any?): {{classname}}? = data?.let {
val normalizedData = "$it".lowercase() val normalizedData = "$it".lowercase()
values().firstOrNull { value -> values().firstOrNull { value ->
it == value || normalizedData == "$value".lowercase() it == value || normalizedData == "$value".lowercase()

View File

@ -1,8 +1,8 @@
package {{packageName}}.infrastructure package {{packageName}}.infrastructure
{{#nonPublicApi}}internal {{/nonPublicApi}}typealias MultiValueMap = MutableMap<String,List<String>> {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}typealias MultiValueMap = MutableMap<String,List<String>>
{{#nonPublicApi}}internal {{/nonPublicApi}}fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun collectionDelimiter(collectionFormat: String): String = when(collectionFormat) {
"csv" -> "," "csv" -> ","
"tsv" -> "\t" "tsv" -> "\t"
"pipe" -> "|" "pipe" -> "|"
@ -10,12 +10,12 @@ package {{packageName}}.infrastructure
else -> "" else -> ""
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" } {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" }
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter) {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Array<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String>
= toMultiValue(items.asIterable(), collectionFormat, map) = toMultiValue(items.asIterable(), collectionFormat, map)
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Iterable<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any?> toMultiValue(items: Iterable<T>, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List<String> {
return when(collectionFormat) { return when(collectionFormat) {
"multi" -> items.map(map) "multi" -> items.map(map)
else -> listOf(items.joinToString(separator = collectionDelimiter(collectionFormat), transform = map)) else -> listOf(items.joinToString(separator = collectionDelimiter(collectionFormat), transform = map))

View File

@ -5,7 +5,7 @@ package {{packageName}}.infrastructure
* NOTE: Headers is a Map<String,String> because rfc2616 defines * NOTE: Headers is a Map<String,String> because rfc2616 defines
* multi-valued headers as csv-only. * multi-valued headers as csv-only.
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}data class PartConfig<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class PartConfig<T>(
val headers: MutableMap<String, String> = mutableMapOf(), val headers: MutableMap<String, String> = mutableMapOf(),
val body: T? = null val body: T? = null
) )

View File

@ -8,7 +8,7 @@ package {{packageName}}.infrastructure
* NOTE: Headers is a Map<String,String> because rfc2616 defines * NOTE: Headers is a Map<String,String> because rfc2616 defines
* multi-valued headers as csv-only. * multi-valued headers as csv-only.
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class RequestConfig<T>(
val method: RequestMethod, val method: RequestMethod,
val path: String, val path: String,
val headers: MutableMap<String, String> = mutableMapOf(), val headers: MutableMap<String, String> = mutableMapOf(),

View File

@ -3,6 +3,6 @@ package {{packageName}}.infrastructure
/** /**
* Provides enumerated HTTP verbs * Provides enumerated HTTP verbs
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class RequestMethod { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class RequestMethod {
GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT
} }

View File

@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
@Serializer(forClass = AtomicBoolean::class) @Serializer(forClass = AtomicBoolean::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicBooleanAdapter : KSerializer<AtomicBoolean> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicBooleanAdapter : KSerializer<AtomicBoolean> {
override fun serialize(encoder: Encoder, value: AtomicBoolean) { override fun serialize(encoder: Encoder, value: AtomicBoolean) {
encoder.encodeBoolean(value.get()) encoder.encodeBoolean(value.get())
} }

View File

@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
@Serializer(forClass = AtomicInteger::class) @Serializer(forClass = AtomicInteger::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicIntegerAdapter : KSerializer<AtomicInteger> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicIntegerAdapter : KSerializer<AtomicInteger> {
override fun serialize(encoder: Encoder, value: AtomicInteger) { override fun serialize(encoder: Encoder, value: AtomicInteger) {
encoder.encodeInt(value.get()) encoder.encodeInt(value.get())
} }

View File

@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicLong
@Serializer(forClass = AtomicLong::class) @Serializer(forClass = AtomicLong::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object AtomicLongAdapter : KSerializer<AtomicLong> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object AtomicLongAdapter : KSerializer<AtomicLong> {
override fun serialize(encoder: Encoder, value: AtomicLong) { override fun serialize(encoder: Encoder, value: AtomicLong) {
encoder.encodeLong(value.get()) encoder.encodeLong(value.get())
} }

View File

@ -17,21 +17,21 @@ import java.math.BigDecimal
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@Serializer(forClass = BigDecimal::class) @Serializer(forClass = BigDecimal::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object BigDecimalAdapter : KSerializer<BigDecimal> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object BigDecimalAdapter : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString()) override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString())
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString()) override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString())
} }
{{/kotlinx_serialization}} {{/kotlinx_serialization}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class BigDecimalAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class BigDecimalAdapter {
@ToJson @ToJson
fun toJson(value: BigDecimal): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: BigDecimal): String {
return value.toPlainString() return value.toPlainString()
} }
@FromJson @FromJson
fun fromJson(value: String): BigDecimal { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): BigDecimal {
return BigDecimal(value) return BigDecimal(value)
} }
} }

View File

@ -17,7 +17,7 @@ import java.math.BigInteger
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@Serializer(forClass = BigInteger::class) @Serializer(forClass = BigInteger::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object BigIntegerAdapter : KSerializer<BigInteger> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object BigIntegerAdapter : KSerializer<BigInteger> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): BigInteger { override fun deserialize(decoder: Decoder): BigInteger {
return BigInteger(decoder.decodeString()) return BigInteger(decoder.decodeString())
@ -29,14 +29,14 @@ import java.math.BigInteger
} }
{{/kotlinx_serialization}} {{/kotlinx_serialization}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class BigIntegerAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class BigIntegerAdapter {
@ToJson @ToJson
fun toJson(value: BigInteger): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: BigInteger): String {
return value.toString() return value.toString()
} }
@FromJson @FromJson
fun fromJson(value: String): BigInteger { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): BigInteger {
return BigInteger(value) return BigInteger(value)
} }
} }

View File

@ -13,16 +13,16 @@ import java.io.IOException
{{/gson}} {{/gson}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class ByteArrayAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ByteArrayAdapter {
@ToJson @ToJson
fun toJson(data: ByteArray): String = String(data) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(data: ByteArray): String = String(data)
@FromJson @FromJson
fun fromJson(data: String): ByteArray = data.toByteArray() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(data: String): ByteArray = data.toByteArray()
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class ByteArrayAdapter : TypeAdapter<ByteArray>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ByteArrayAdapter : TypeAdapter<ByteArray>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: ByteArray?) { override fun write(out: JsonWriter?, value: ByteArray?) {
if (value == null) { if (value == null) {

View File

@ -14,21 +14,21 @@ import java.io.IOException
import kotlinx.datetime.Instant import kotlinx.datetime.Instant
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class InstantAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class InstantAdapter {
@ToJson @ToJson
fun toJson(value: Instant): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: Instant): String {
return value.toString() return value.toString()
} }
@FromJson @FromJson
fun fromJson(value: String): Instant { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): Instant {
return Instant.parse(value) return Instant.parse(value)
} }
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class InstantAdapter : TypeAdapter<Instant>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class InstantAdapter : TypeAdapter<Instant>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: Instant?) { override fun write(out: JsonWriter?, value: Instant?) {
if (value == null) { if (value == null) {

View File

@ -35,9 +35,9 @@ import kotlinx.datetime.LocalDate
{{/kotlinx-datetime}} {{/kotlinx-datetime}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalDateAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalDateAdapter {
@ToJson @ToJson
fun toJson(value: LocalDate): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: LocalDate): String {
{{#kotlinx-datetime}} {{#kotlinx-datetime}}
return value.toString() return value.toString()
{{/kotlinx-datetime}} {{/kotlinx-datetime}}
@ -47,14 +47,14 @@ import kotlinx.datetime.LocalDate
} }
@FromJson @FromJson
fun fromJson(value: String): LocalDate { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): LocalDate {
return LocalDate.parse(value{{^kotlinx-datetime}}, DateTimeFormatter.ISO_LOCAL_DATE{{/kotlinx-datetime}}) return LocalDate.parse(value{{^kotlinx-datetime}}, DateTimeFormatter.ISO_LOCAL_DATE{{/kotlinx-datetime}})
} }
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalDateAdapter({{^kotlinx-datetime}}private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE{{/kotlinx-datetime}}) : TypeAdapter<LocalDate>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalDateAdapter({{^kotlinx-datetime}}private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE{{/kotlinx-datetime}}) : TypeAdapter<LocalDate>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: LocalDate?) { override fun write(out: JsonWriter?, value: LocalDate?) {
if (value == null) { if (value == null) {
@ -88,7 +88,7 @@ import kotlinx.datetime.LocalDate
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
{{^kotlinx-datetime}} {{^kotlinx-datetime}}
@Serializer(forClass = LocalDate::class) @Serializer(forClass = LocalDate::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object LocalDateAdapter : KSerializer<LocalDate> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object LocalDateAdapter : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) { override fun serialize(encoder: Encoder, value: LocalDate) {

View File

@ -35,9 +35,9 @@ import kotlinx.datetime.LocalDateTime
{{/kotlinx-datetime}} {{/kotlinx-datetime}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalDateTimeAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalDateTimeAdapter {
@ToJson @ToJson
fun toJson(value: LocalDateTime): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: LocalDateTime): String {
{{#kotlinx-datetime}} {{#kotlinx-datetime}}
return value.toString() return value.toString()
{{/kotlinx-datetime}} {{/kotlinx-datetime}}
@ -47,14 +47,14 @@ import kotlinx.datetime.LocalDateTime
} }
@FromJson @FromJson
fun fromJson(value: String): LocalDateTime { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): LocalDateTime {
return LocalDateTime.parse(value{{^kotlinx-datetime}}, DateTimeFormatter.ISO_LOCAL_DATE_TIME{{/kotlinx-datetime}}) return LocalDateTime.parse(value{{^kotlinx-datetime}}, DateTimeFormatter.ISO_LOCAL_DATE_TIME{{/kotlinx-datetime}})
} }
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalDateTimeAdapter({{^kotlinx-datetime}}private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME{{/kotlinx-datetime}}) : TypeAdapter<LocalDateTime>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalDateTimeAdapter({{^kotlinx-datetime}}private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME{{/kotlinx-datetime}}) : TypeAdapter<LocalDateTime>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: LocalDateTime?) { override fun write(out: JsonWriter?, value: LocalDateTime?) {
if (value == null) { if (value == null) {
@ -88,7 +88,7 @@ import kotlinx.datetime.LocalDateTime
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
{{^kotlinx-datetime}} {{^kotlinx-datetime}}
@Serializer(forClass = LocalDateTime::class) @Serializer(forClass = LocalDateTime::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object LocalDateTimeAdapter : KSerializer<LocalDateTime> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object LocalDateTimeAdapter : KSerializer<LocalDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) { override fun serialize(encoder: Encoder, value: LocalDateTime) {

View File

@ -14,21 +14,21 @@ import java.io.IOException
import kotlinx.datetime.LocalTime import kotlinx.datetime.LocalTime
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalTimeAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalTimeAdapter {
@ToJson @ToJson
fun toJson(value: LocalTime): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: LocalTime): String {
return value.toString() return value.toString()
} }
@FromJson @FromJson
fun fromJson(value: String): LocalTime { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): LocalTime {
return LocalTime.parse(value) return LocalTime.parse(value)
} }
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class LocalTimeAdapter : TypeAdapter<LocalTime>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class LocalTimeAdapter : TypeAdapter<LocalTime>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: LocalTime?) { override fun write(out: JsonWriter?, value: LocalTime?) {
if (value == null) { if (value == null) {

View File

@ -30,21 +30,21 @@ import org.threeten.bp.format.DateTimeFormatter
{{/threetenbp}} {{/threetenbp}}
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class OffsetDateTimeAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OffsetDateTimeAdapter {
@ToJson @ToJson
fun toJson(value: OffsetDateTime): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(value: OffsetDateTime): String {
return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value) return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value)
} }
@FromJson @FromJson
fun fromJson(value: String): OffsetDateTime { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(value: String): OffsetDateTime {
return OffsetDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME) return OffsetDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME)
} }
} }
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class OffsetDateTimeAdapter(private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME) : TypeAdapter<OffsetDateTime>() { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OffsetDateTimeAdapter(private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME) : TypeAdapter<OffsetDateTime>() {
@Throws(IOException::class) @Throws(IOException::class)
override fun write(out: JsonWriter?, value: OffsetDateTime?) { override fun write(out: JsonWriter?, value: OffsetDateTime?) {
if (value == null) { if (value == null) {
@ -72,7 +72,7 @@ import org.threeten.bp.format.DateTimeFormatter
{{/gson}} {{/gson}}
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@Serializer(forClass = OffsetDateTime::class) @Serializer(forClass = OffsetDateTime::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object OffsetDateTimeAdapter : KSerializer<OffsetDateTime> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object OffsetDateTimeAdapter : KSerializer<OffsetDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("OffsetDateTime", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("OffsetDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: OffsetDateTime) { override fun serialize(encoder: Encoder, value: OffsetDateTime) {

View File

@ -58,10 +58,10 @@ import java.util.concurrent.atomic.AtomicInteger
import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicLong
{{/kotlinx_serialization}} {{/kotlinx_serialization}}
{{#nonPublicApi}}internal {{/nonPublicApi}}object Serializer { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object Serializer {
{{#moshi}} {{#moshi}}
@JvmStatic @JvmStatic
val moshiBuilder: Moshi.Builder = Moshi.Builder() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val moshiBuilder: Moshi.Builder = Moshi.Builder()
.add(OffsetDateTimeAdapter()) .add(OffsetDateTimeAdapter())
{{#kotlinx-datetime}} {{#kotlinx-datetime}}
.add(InstantAdapter()) .add(InstantAdapter())
@ -79,7 +79,7 @@ import java.util.concurrent.atomic.AtomicLong
.add(BigIntegerAdapter()) .add(BigIntegerAdapter())
@JvmStatic @JvmStatic
val moshi: Moshi by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val moshi: Moshi by lazy {
{{#enumUnknownDefaultCase}} {{#enumUnknownDefaultCase}}
SerializerHelper.addEnumUnknownDefaultCase(moshiBuilder) SerializerHelper.addEnumUnknownDefaultCase(moshiBuilder)
{{/enumUnknownDefaultCase}} {{/enumUnknownDefaultCase}}

View File

@ -7,9 +7,9 @@ import com.squareup.moshi.adapters.EnumJsonAdapter
{{/enumUnknownDefaultCase}} {{/enumUnknownDefaultCase}}
{{/moshi}} {{/moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}object SerializerHelper { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object SerializerHelper {
{{#moshi}} {{#moshi}}
fun addEnumUnknownDefaultCase(moshiBuilder: Moshi.Builder): Moshi.Builder { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun addEnumUnknownDefaultCase(moshiBuilder: Moshi.Builder): Moshi.Builder {
return moshiBuilder return moshiBuilder
{{#enumUnknownDefaultCase}} {{#enumUnknownDefaultCase}}
{{#models}} {{#models}}

View File

@ -9,7 +9,7 @@ import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
@Serializer(forClass = StringBuilder::class) @Serializer(forClass = StringBuilder::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object StringBuilderAdapter : KSerializer<StringBuilder> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object StringBuilderAdapter : KSerializer<StringBuilder> {
override fun serialize(encoder: Encoder, value: StringBuilder) { override fun serialize(encoder: Encoder, value: StringBuilder) {
encoder.encodeString(value.toString()) encoder.encodeString(value.toString())
} }

View File

@ -16,17 +16,17 @@ import com.squareup.moshi.ToJson
import java.net.URI import java.net.URI
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class URIAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class URIAdapter {
@ToJson @ToJson
fun toJson(uri: URI) = uri.toString() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(uri: URI): String = uri.toString()
@FromJson @FromJson
fun fromJson(s: String): URI = URI.create(s) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(s: String): URI = URI.create(s)
} }
{{/moshi}} {{/moshi}}
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@Serializer(forClass = URI::class) @Serializer(forClass = URI::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object URIAdapter : KSerializer<URI> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object URIAdapter : KSerializer<URI> {
override fun serialize(encoder: Encoder, value: URI) { override fun serialize(encoder: Encoder, value: URI) {
encoder.encodeString(value.toASCIIString()) encoder.encodeString(value.toASCIIString())
} }

View File

@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import java.net.URL import java.net.URL
@Serializer(forClass = URL::class) @Serializer(forClass = URL::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object URLAdapter : KSerializer<URL> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object URLAdapter : KSerializer<URL> {
override fun serialize(encoder: Encoder, value: URL) { override fun serialize(encoder: Encoder, value: URL) {
encoder.encodeString(value.toExternalForm()) encoder.encodeString(value.toExternalForm())
} }

View File

@ -16,17 +16,17 @@ import com.squareup.moshi.ToJson
import java.util.UUID import java.util.UUID
{{#moshi}} {{#moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class UUIDAdapter { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class UUIDAdapter {
@ToJson @ToJson
fun toJson(uuid: UUID) = uuid.toString() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toJson(uuid: UUID): String = uuid.toString()
@FromJson @FromJson
fun fromJson(s: String): UUID = UUID.fromString(s) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun fromJson(s: String): UUID = UUID.fromString(s)
} }
{{/moshi}} {{/moshi}}
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
@Serializer(forClass = UUID::class) @Serializer(forClass = UUID::class)
{{#nonPublicApi}}internal {{/nonPublicApi}}object UUIDAdapter : KSerializer<UUID> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}object UUIDAdapter : KSerializer<UUID> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: UUID) { override fun serialize(encoder: Encoder, value: UUID) {

View File

@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
{{/jackson}} {{/jackson}}
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}open class {{classname}}( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class {{classname}}(
baseUrl: String = ApiClient.BASE_URL, baseUrl: String = ApiClient.BASE_URL,
httpClientEngine: HttpClientEngine? = null, httpClientEngine: HttpClientEngine? = null,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
@ -51,7 +51,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
{{#returnType}} {{#returnType}}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
{{/returnType}} {{/returnType}}
open suspend fun {{operationId}}({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): HttpResponse<{{{returnType}}}{{^returnType}}Unit{{/returnType}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open suspend fun {{operationId}}({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): HttpResponse<{{{returnType}}}{{^returnType}}Unit{{/returnType}}> {
val localVariableAuthNames = listOf<String>({{#authMethods}}"{{name}}"{{^-last}}, {{/-last}}{{/authMethods}}) val localVariableAuthNames = listOf<String>({{#authMethods}}"{{name}}"{{^-last}}, {{/-last}}{{/authMethods}})

View File

@ -1,8 +1,8 @@
package {{packageName}}.auth package {{packageName}}.auth
class ApiKeyAuth(private val location: String, val paramName: String) : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ApiKeyAuth(private val location: String, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val paramName: String) : Authentication {
var apiKey: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var apiKey: String? = null
var apiKeyPrefix: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var apiKeyPrefix: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val key: String = apiKey ?: return val key: String = apiKey ?: return

View File

@ -1,6 +1,6 @@
package {{packageName}}.auth package {{packageName}}.auth
interface Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface Authentication {
/** /**
* Apply authentication settings to header and query params. * Apply authentication settings to header and query params.
@ -8,6 +8,6 @@ interface Authentication {
* @param query Query parameters. * @param query Query parameters.
* @param headers Header parameters. * @param headers Header parameters.
*/ */
fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>)
} }

View File

@ -3,9 +3,9 @@ package {{packageName}}.auth
import io.ktor.util.InternalAPI import io.ktor.util.InternalAPI
import io.ktor.util.encodeBase64 import io.ktor.util.encodeBase64
class HttpBasicAuth : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBasicAuth : Authentication {
var username: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var username: String? = null
var password: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var password: String? = null
@OptIn(InternalAPI::class) @OptIn(InternalAPI::class)
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {

View File

@ -1,7 +1,7 @@
package {{packageName}}.auth package {{packageName}}.auth
class HttpBearerAuth(private val scheme: String?) : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBearerAuth(private val scheme: String?) : Authentication {
var bearerToken: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var bearerToken: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val token: String = bearerToken ?: return val token: String = bearerToken ?: return

View File

@ -1,7 +1,7 @@
package {{packageName}}.auth package {{packageName}}.auth
class OAuth : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OAuth : Authentication {
var accessToken: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var accessToken: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val token: String = accessToken ?: return val token: String = accessToken ?: return

View File

@ -38,7 +38,7 @@ import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
{{/jackson}} {{/jackson}}
import {{packageName}}.auth.* import {{packageName}}.auth.*
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(
private val baseUrl: String, private val baseUrl: String,
httpClientEngine: HttpClientEngine?, httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
@ -81,16 +81,16 @@ import {{packageName}}.auth.*
private val authentications: kotlin.collections.Map<String, Authentication>? = null private val authentications: kotlin.collections.Map<String, Authentication>? = null
{{/hasAuthMethods}} {{/hasAuthMethods}}
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
const val BASE_URL = "{{{basePath}}}" {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}const val BASE_URL: String = "{{{basePath}}}"
{{#gson}} {{#gson}}
val JSON_DEFAULT : GsonBuilder.() -> Unit = { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val JSON_DEFAULT : GsonBuilder.() -> Unit = {
setDateFormat(DateFormat.LONG) setDateFormat(DateFormat.LONG)
setPrettyPrinting() setPrettyPrinting()
} }
{{/gson}} {{/gson}}
{{#jackson}} {{#jackson}}
val JSON_DEFAULT: ObjectMapper.() -> Unit = { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val JSON_DEFAULT: ObjectMapper.() -> Unit = {
configure(SerializationFeature.INDENT_OUTPUT, true) configure(SerializationFeature.INDENT_OUTPUT, true)
setDefaultPrettyPrinter(DefaultPrettyPrinter().apply { setDefaultPrettyPrinter(DefaultPrettyPrinter().apply {
indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance) indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance)
@ -99,7 +99,7 @@ import {{packageName}}.auth.*
registerModule(JavaTimeModule()) registerModule(JavaTimeModule())
} }
{{/jackson}} {{/jackson}}
protected val UNSAFE_HEADERS = listOf(HttpHeaders.ContentType) protected val UNSAFE_HEADERS: List<String> = listOf(HttpHeaders.ContentType)
} }
/** /**
@ -107,7 +107,7 @@ import {{packageName}}.auth.*
* *
* @param username Username * @param username Username
*/ */
fun setUsername(username: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setUsername(username: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth? val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth?
?: throw Exception("No HTTP basic authentication configured") ?: throw Exception("No HTTP basic authentication configured")
auth.username = username auth.username = username
@ -118,7 +118,7 @@ import {{packageName}}.auth.*
* *
* @param password Password * @param password Password
*/ */
fun setPassword(password: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setPassword(password: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth? val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth?
?: throw Exception("No HTTP basic authentication configured") ?: throw Exception("No HTTP basic authentication configured")
auth.password = password auth.password = password
@ -130,7 +130,7 @@ import {{packageName}}.auth.*
* @param apiKey API key * @param apiKey API key
* @param paramName The name of the API key parameter, or null or set the first key. * @param paramName The name of the API key parameter, or null or set the first key.
*/ */
fun setApiKey(apiKey: String, paramName: String? = null) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setApiKey(apiKey: String, paramName: String? = null) {
val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName)} as ApiKeyAuth? val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName)} as ApiKeyAuth?
?: throw Exception("No API key authentication configured") ?: throw Exception("No API key authentication configured")
auth.apiKey = apiKey auth.apiKey = apiKey
@ -142,7 +142,7 @@ import {{packageName}}.auth.*
* @param apiKeyPrefix API key prefix * @param apiKeyPrefix API key prefix
* @param paramName The name of the API key parameter, or null or set the first key. * @param paramName The name of the API key parameter, or null or set the first key.
*/ */
fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) {
val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName) } as ApiKeyAuth? val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName) } as ApiKeyAuth?
?: throw Exception("No API key authentication configured") ?: throw Exception("No API key authentication configured")
auth.apiKeyPrefix = apiKeyPrefix auth.apiKeyPrefix = apiKeyPrefix
@ -153,7 +153,7 @@ import {{packageName}}.auth.*
* *
* @param accessToken Access token * @param accessToken Access token
*/ */
fun setAccessToken(accessToken: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setAccessToken(accessToken: String) {
val auth = authentications?.values?.firstOrNull { it is OAuth } as OAuth? val auth = authentications?.values?.firstOrNull { it is OAuth } as OAuth?
?: throw Exception("No OAuth2 authentication configured") ?: throw Exception("No OAuth2 authentication configured")
auth.accessToken = accessToken auth.accessToken = accessToken
@ -164,7 +164,7 @@ import {{packageName}}.auth.*
* *
* @param bearerToken The bearer token. * @param bearerToken The bearer token.
*/ */
fun setBearerToken(bearerToken: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setBearerToken(bearerToken: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBearerAuth } as HttpBearerAuth? val auth = authentications?.values?.firstOrNull { it is HttpBearerAuth } as HttpBearerAuth?
?: throw Exception("No Bearer authentication configured") ?: throw Exception("No Bearer authentication configured")
auth.bearerToken = bearerToken auth.bearerToken = bearerToken

View File

@ -5,14 +5,14 @@ import io.ktor.http.isSuccess
import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.TypeInfo
import io.ktor.util.reflect.typeInfo import io.ktor.util.reflect.typeInfo
{{#nonPublicApi}}internal {{/nonPublicApi}}open class HttpResponse<T : Any>(val response: io.ktor.client.statement.HttpResponse, val provider: BodyProvider<T>) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class HttpResponse<T : Any>({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val response: io.ktor.client.statement.HttpResponse, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val provider: BodyProvider<T>) {
val status: Int = response.status.value {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val status: Int = response.status.value
val success: Boolean = response.status.isSuccess() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val success: Boolean = response.status.isSuccess()
val headers: Map<String, List<String>> = response.headers.mapEntries() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val headers: Map<String, List<String>> = response.headers.mapEntries()
suspend fun body(): T = provider.body(response) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun body(): T = provider.body(response)
suspend fun <V : Any> typedBody(type: TypeInfo): V = provider.typedBody(response, type) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun <V : Any> typedBody(type: TypeInfo): V = provider.typedBody(response, type)
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private fun Headers.mapEntries(): Map<String, List<String>> { private fun Headers.mapEntries(): Map<String, List<String>> {
val result = mutableMapOf<String, List<String>>() val result = mutableMapOf<String, List<String>>()
entries().forEach { result[it.key] = it.value } entries().forEach { result[it.key] = it.value }
@ -21,12 +21,12 @@ import io.ktor.util.reflect.typeInfo
} }
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}interface BodyProvider<T : Any> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface BodyProvider<T : Any> {
suspend fun body(response: io.ktor.client.statement.HttpResponse): T suspend fun body(response: io.ktor.client.statement.HttpResponse): T
suspend fun <V : Any> typedBody(response: io.ktor.client.statement.HttpResponse, type: TypeInfo): V suspend fun <V : Any> typedBody(response: io.ktor.client.statement.HttpResponse, type: TypeInfo): V
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class TypedBodyProvider<T : Any>(private val type: TypeInfo) : BodyProvider<T> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class TypedBodyProvider<T : Any>(private val type: TypeInfo) : BodyProvider<T> {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override suspend fun body(response: io.ktor.client.statement.HttpResponse): T = override suspend fun body(response: io.ktor.client.statement.HttpResponse): T =
response.call.body(type) as T response.call.body(type) as T
@ -36,7 +36,7 @@ import io.ktor.util.reflect.typeInfo
response.call.body(type) as V response.call.body(type) as V
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class MappedBodyProvider<S : Any, T : Any>(private val provider: BodyProvider<S>, private val block: S.() -> T) : BodyProvider<T> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class MappedBodyProvider<S : Any, T : Any>(private val provider: BodyProvider<S>, private val block: S.() -> T) : BodyProvider<T> {
override suspend fun body(response: io.ktor.client.statement.HttpResponse): T = override suspend fun body(response: io.ktor.client.statement.HttpResponse): T =
block(provider.body(response)) block(provider.body(response))
@ -44,8 +44,8 @@ import io.ktor.util.reflect.typeInfo
provider.typedBody(response, type) provider.typedBody(response, type)
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}inline fun <reified T : Any> io.ktor.client.statement.HttpResponse.wrap(): HttpResponse<T> = {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T : Any> io.ktor.client.statement.HttpResponse.wrap(): HttpResponse<T> =
HttpResponse(this, TypedBodyProvider(typeInfo<T>())) HttpResponse(this, TypedBodyProvider(typeInfo<T>()))
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any, V : Any> HttpResponse<T>.map(block: T.() -> V): HttpResponse<V> = {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any, V : Any> HttpResponse<T>.map(block: T.() -> V): HttpResponse<V> =
HttpResponse(response, MappedBodyProvider(provider, block)) HttpResponse(response, MappedBodyProvider(provider, block))

View File

@ -48,10 +48,10 @@ import {{packageName}}.infrastructure.Success
import {{packageName}}.infrastructure.toMultiValue import {{packageName}}.infrastructure.toMultiValue
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}}(basePath: kotlin.String = defaultBasePath, client: Call.Factory = ApiClient.defaultClient) : ApiClient(basePath, client) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class {{classname}}(basePath: kotlin.String = defaultBasePath, client: Call.Factory = ApiClient.defaultClient) : ApiClient(basePath, client) {
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
@JvmStatic @JvmStatic
val defaultBasePath: String by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultBasePath: String by lazy {
System.getProperties().getProperty(ApiClient.baseUrlKey, "{{{basePath}}}") System.getProperties().getProperty(ApiClient.baseUrlKey, "{{{basePath}}}")
} }
} }
@ -62,7 +62,7 @@ import {{packageName}}.infrastructure.toMultiValue
/** /**
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -138,7 +138,7 @@ import {{packageName}}.infrastructure.toMultiValue
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
{{#isDeprecated}} {{#isDeprecated}}
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
{{/isDeprecated}} {{/isDeprecated}}
@ -172,7 +172,7 @@ import {{packageName}}.infrastructure.toMultiValue
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>{{^doNotUseRxAndCoroutines}}{{#useCoroutines}} = withContext(Dispatchers.IO){{/useCoroutines}}{{/doNotUseRxAndCoroutines}} {
{{#isDeprecated}} {{#isDeprecated}}
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
{{/isDeprecated}} {{/isDeprecated}}
@ -192,7 +192,7 @@ import {{packageName}}.infrastructure.toMultiValue
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> {
val localVariableBody = {{#hasBodyParam}}{{! val localVariableBody = {{#hasBodyParam}}{{!
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!

View File

@ -58,33 +58,33 @@ import com.fasterxml.jackson.core.type.TypeReference
import com.squareup.moshi.adapter import com.squareup.moshi.adapter
{{/moshi}} {{/moshi}}
{{#nonPublicApi}}internal {{/nonPublicApi}}val EMPTY_REQUEST: RequestBody = ByteArray(0).toRequestBody() {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val EMPTY_REQUEST: RequestBody = ByteArray(0).toRequestBody()
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val baseUrl: String, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val client: Call.Factory = defaultClient) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
protected const val ContentType = "Content-Type" protected const val ContentType: String = "Content-Type"
protected const val Accept = "Accept" protected const val Accept: String = "Accept"
protected const val Authorization = "Authorization" protected const val Authorization: String = "Authorization"
protected const val JsonMediaType = "application/json" protected const val JsonMediaType: String = "application/json"
protected const val FormDataMediaType = "multipart/form-data" protected const val FormDataMediaType: String = "multipart/form-data"
protected const val FormUrlEncMediaType = "application/x-www-form-urlencoded" protected const val FormUrlEncMediaType: String = "application/x-www-form-urlencoded"
protected const val XmlMediaType = "application/xml" protected const val XmlMediaType: String = "application/xml"
protected const val OctetMediaType = "application/octet-stream" protected const val OctetMediaType: String = "application/octet-stream"
val apiKey: MutableMap<String, String> = mutableMapOf() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val apiKey: MutableMap<String, String> = mutableMapOf()
val apiKeyPrefix: MutableMap<String, String> = mutableMapOf() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val apiKeyPrefix: MutableMap<String, String> = mutableMapOf()
var username: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var username: String? = null
var password: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var password: String? = null
var accessToken: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var accessToken: String? = null
const val baseUrlKey = "{{packageName}}.baseUrl" {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}const val baseUrlKey: String = "{{packageName}}.baseUrl"
@JvmStatic @JvmStatic
val defaultClient: OkHttpClient by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultClient: OkHttpClient by lazy {
builder.build() builder.build()
} }
@JvmStatic @JvmStatic
val builder: OkHttpClient.Builder = OkHttpClient.Builder() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val builder: OkHttpClient.Builder = OkHttpClient.Builder()
} }
/** /**

View File

@ -1,43 +1,43 @@
package {{packageName}}.infrastructure package {{packageName}}.infrastructure
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class ResponseType { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class ResponseType {
Success, Informational, Redirection, ClientError, ServerError Success, Informational, Redirection, ClientError, ServerError
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}interface Response {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface Response
{{#nonPublicApi}}internal {{/nonPublicApi}}abstract class ApiResponse<T>(val responseType: ResponseType): Response { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract class ApiResponse<T>({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val responseType: ResponseType): Response {
abstract val statusCode: Int {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract val statusCode: Int
abstract val headers: Map<String,List<String>> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract val headers: Map<String,List<String>>
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class Success<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Success<T>(
val data: T{{#nullableReturnType}}?{{/nullableReturnType}}, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val data: T{{#nullableReturnType}}?{{/nullableReturnType}},
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
): ApiResponse<T>(ResponseType.Success) ): ApiResponse<T>(ResponseType.Success)
{{#nonPublicApi}}internal {{/nonPublicApi}}class Informational<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Informational<T>(
val statusText: String, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val statusText: String,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.Informational) ) : ApiResponse<T>(ResponseType.Informational)
{{#nonPublicApi}}internal {{/nonPublicApi}}class Redirection<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Redirection<T>(
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.Redirection) ) : ApiResponse<T>(ResponseType.Redirection)
{{#nonPublicApi}}internal {{/nonPublicApi}}class ClientError<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ClientError<T>(
val message: String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val message: String? = null,
val body: Any? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val body: Any? = null,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.ClientError) ) : ApiResponse<T>(ResponseType.ClientError)
{{#nonPublicApi}}internal {{/nonPublicApi}}class ServerError<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ServerError<T>(
val message: String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val message: String? = null,
val body: Any? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val body: Any? = null,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> override val headers: Map<String, List<String>>
): ApiResponse<T>(ResponseType.ServerError) ): ApiResponse<T>(ResponseType.ServerError)

View File

@ -3,16 +3,16 @@ package {{packageName}}.infrastructure
import java.lang.RuntimeException import java.lang.RuntimeException
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ClientException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ClientException(message: kotlin.String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val statusCode: Int = -1, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val response: Response? = null) : RuntimeException(message) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private const val serialVersionUID: Long = 123L private const val serialVersionUID: Long = 123L
} }
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ServerException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ServerException(message: kotlin.String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val statusCode: Int = -1, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val response: Response? = null) : RuntimeException(message) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private const val serialVersionUID: Long = 456L private const val serialVersionUID: Long = 456L
} }
} }

View File

@ -5,20 +5,20 @@ import okhttp3.Response
/** /**
* Provides an extension to evaluation whether the response is a 1xx code * Provides an extension to evaluation whether the response is a 1xx code
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}val Response.isInformational : Boolean get() = this.code in 100..199 {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val Response.isInformational : Boolean get() = this.code in 100..199
/** /**
* Provides an extension to evaluation whether the response is a 3xx code * Provides an extension to evaluation whether the response is a 3xx code
*/ */
@Suppress("EXTENSION_SHADOWED_BY_MEMBER") @Suppress("EXTENSION_SHADOWED_BY_MEMBER")
{{#nonPublicApi}}internal {{/nonPublicApi}}val Response.isRedirect : Boolean get() = this.code in 300..399 {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val Response.isRedirect : Boolean get() = this.code in 300..399
/** /**
* Provides an extension to evaluation whether the response is a 4xx code * Provides an extension to evaluation whether the response is a 4xx code
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}val Response.isClientError : Boolean get() = this.code in 400..499 {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val Response.isClientError : Boolean get() = this.code in 400..499
/** /**
* Provides an extension to evaluation whether the response is a 5xx (Standard) through 999 (non-standard) code * Provides an extension to evaluation whether the response is a 5xx (Standard) through 999 (non-standard) code
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}val Response.isServerError : Boolean get() = this.code in 500..999 {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val Response.isServerError : Boolean get() = this.code in 500..999

View File

@ -69,7 +69,7 @@ import okhttp3.MultipartBody
{{/isMultipart}} {{/isMultipart}}
{{/x-kotlin-multipart-import}} {{/x-kotlin-multipart-import}}
{{#nonPublicApi}}internal {{/nonPublicApi}}interface {{classname}} { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface {{classname}} {
{{#operation}} {{#operation}}
{{#allParams}} {{#allParams}}
{{#isEnum}} {{#isEnum}}
@ -77,7 +77,7 @@ import okhttp3.MultipartBody
/** /**
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -154,7 +154,7 @@ import okhttp3.MultipartBody
{{/prioritizedContentTypes}} {{/prioritizedContentTypes}}
{{/formParams}} {{/formParams}}
@{{httpMethod}}("{{{path}}}") @{{httpMethod}}("{{{path}}}")
{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{^allParams}}){{/allParams}}{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{#-last}}){{/-last}}{{/allParams}}: {{^doNotUseRxAndCoroutines}}{{#useRxJava}}Observable<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/useRxJava}}{{#useRxJava2}}{{#returnType}}Single<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{/isResponseFile}}>{{/returnType}}{{^returnType}}Completable{{/returnType}}{{/useRxJava2}}{{#useRxJava3}}{{#returnType}}Single<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{/isResponseFile}}>{{/returnType}}{{^returnType}}Completable{{/returnType}}{{/useRxJava3}}{{#useCoroutines}}Response<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/useCoroutines}}{{/doNotUseRxAndCoroutines}}{{#doNotUseRxAndCoroutines}}Call<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/doNotUseRxAndCoroutines}} {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{^allParams}}){{/allParams}}{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{#-last}}){{/-last}}{{/allParams}}: {{^doNotUseRxAndCoroutines}}{{#useRxJava}}Observable<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/useRxJava}}{{#useRxJava2}}{{#returnType}}Single<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{/isResponseFile}}>{{/returnType}}{{^returnType}}Completable{{/returnType}}{{/useRxJava2}}{{#useRxJava3}}{{#returnType}}Single<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{/isResponseFile}}>{{/returnType}}{{^returnType}}Completable{{/returnType}}{{/useRxJava3}}{{#useCoroutines}}Response<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/useCoroutines}}{{/doNotUseRxAndCoroutines}}{{#doNotUseRxAndCoroutines}}Call<{{#isResponseFile}}ResponseBody{{/isResponseFile}}{{^isResponseFile}}{{{returnType}}}{{^returnType}}Unit{{/returnType}}{{/isResponseFile}}>{{/doNotUseRxAndCoroutines}}
{{/operation}} {{/operation}}
} }

View File

@ -7,7 +7,7 @@ import java.net.URISyntaxException
import okhttp3.Interceptor import okhttp3.Interceptor
import okhttp3.Response import okhttp3.Response
class ApiKeyAuth( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ApiKeyAuth(
private val location: String = "", private val location: String = "",
private val paramName: String = "", private val paramName: String = "",
private var apiKey: String = "" private var apiKey: String = ""

View File

@ -8,12 +8,12 @@ import okhttp3.Interceptor.Chain
import okhttp3.Response import okhttp3.Response
import okhttp3.Credentials import okhttp3.Credentials
class HttpBasicAuth( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBasicAuth(
private var username: String = "", private var username: String = "",
private var password: String = "" private var password: String = ""
) : Interceptor { ) : Interceptor {
fun setCredentials(username: String, password: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setCredentials(username: String, password: String) {
this.username = username this.username = username
this.password = password this.password = password
} }

View File

@ -6,7 +6,7 @@ import okhttp3.Interceptor
import okhttp3.Interceptor.Chain import okhttp3.Interceptor.Chain
import okhttp3.Response import okhttp3.Response
class HttpBearerAuth( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBearerAuth(
private var schema: String = "", private var schema: String = "",
var bearerToken: String = "" var bearerToken: String = ""
) : Interceptor { ) : Interceptor {

View File

@ -19,13 +19,13 @@ import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Response import okhttp3.Response
class OAuth( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OAuth(
client: OkHttpClient, client: OkHttpClient,
var tokenRequestBuilder: TokenRequestBuilder var tokenRequestBuilder: TokenRequestBuilder
) : Interceptor { ) : Interceptor {
interface AccessTokenListener { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface AccessTokenListener {
fun notify(token: BasicOAuthToken) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun notify(token: BasicOAuthToken)
} }
private var oauthClient: OAuthClient = OAuthClient(OAuthOkHttpClient(client)) private var oauthClient: OAuthClient = OAuthClient(OAuthOkHttpClient(client))
@ -35,14 +35,14 @@ class OAuth(
var authenticationRequestBuilder: AuthenticationRequestBuilder? = null var authenticationRequestBuilder: AuthenticationRequestBuilder? = null
private var accessTokenListener: AccessTokenListener? = null private var accessTokenListener: AccessTokenListener? = null
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
requestBuilder: TokenRequestBuilder requestBuilder: TokenRequestBuilder
) : this( ) : this(
OkHttpClient(), OkHttpClient(),
requestBuilder requestBuilder
) )
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
flow: OAuthFlow, flow: OAuthFlow,
authorizationUrl: String, authorizationUrl: String,
tokenUrl: String, tokenUrl: String,
@ -54,7 +54,7 @@ class OAuth(
authenticationRequestBuilder = OAuthClientRequest.authorizationLocation(authorizationUrl) authenticationRequestBuilder = OAuthClientRequest.authorizationLocation(authorizationUrl)
} }
fun setFlow(flow: OAuthFlow) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setFlow(flow: OAuthFlow) {
when (flow) { when (flow) {
OAuthFlow.accessCode, OAuthFlow.implicit -> OAuthFlow.accessCode, OAuthFlow.implicit ->
tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE) tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE)
@ -129,7 +129,7 @@ class OAuth(
*/ */
@Throws(IOException::class) @Throws(IOException::class)
@Synchronized @Synchronized
fun updateAccessToken(requestAccessToken: String?): Boolean { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun updateAccessToken(requestAccessToken: String?): Boolean {
if (accessToken == null || accessToken.equals(requestAccessToken)) { if (accessToken == null || accessToken.equals(requestAccessToken)) {
return try { return try {
val accessTokenResponse = oauthClient.accessToken(this.tokenRequestBuilder.buildBodyMessage()) val accessTokenResponse = oauthClient.accessToken(this.tokenRequestBuilder.buildBodyMessage())

View File

@ -1,5 +1,5 @@
package {{packageName}}.auth package {{packageName}}.auth
enum class OAuthFlow { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class OAuthFlow {
accessCode, implicit, password, application accessCode, implicit, password, application
} }

View File

@ -16,7 +16,7 @@ import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
class OAuthOkHttpClient( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OAuthOkHttpClient(
private var client: OkHttpClient = OkHttpClient() private var client: OkHttpClient = OkHttpClient()
) : HttpClient { ) : HttpClient {

View File

@ -60,7 +60,7 @@ import {{packageName}}.infrastructure.Serializer.kotlinxSerializationJson
import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaType
{{/kotlinx_serialization}} {{/kotlinx_serialization}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class ApiClient( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ApiClient(
private var baseUrl: String = defaultBasePath, private var baseUrl: String = defaultBasePath,
private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val okHttpClientBuilder: OkHttpClient.Builder? = null,
{{^kotlinx_serialization}} {{^kotlinx_serialization}}
@ -95,7 +95,7 @@ import okhttp3.MediaType.Companion.toMediaType
) )
) { ) {
private val apiAuthorizations = mutableMapOf<String, Interceptor>() private val apiAuthorizations = mutableMapOf<String, Interceptor>()
var logger: ((String) -> Unit)? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var logger: ((String) -> Unit)? = null
private val retrofitBuilder: Retrofit.Builder by lazy { private val retrofitBuilder: Retrofit.Builder by lazy {
Retrofit.Builder() Retrofit.Builder()
@ -129,7 +129,7 @@ import okhttp3.MediaType.Companion.toMediaType
} }
{{#hasAuthMethods}} {{#hasAuthMethods}}
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String = defaultBasePath, baseUrl: String = defaultBasePath,
okHttpClientBuilder: OkHttpClient.Builder? = null, okHttpClientBuilder: OkHttpClient.Builder? = null,
{{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}} {{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}}
@ -168,7 +168,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{#authMethods}} {{#authMethods}}
{{#isBasic}} {{#isBasic}}
{{#isBasicBasic}} {{#isBasicBasic}}
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String = defaultBasePath, baseUrl: String = defaultBasePath,
okHttpClientBuilder: OkHttpClient.Builder? = null, okHttpClientBuilder: OkHttpClient.Builder? = null,
{{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}} {{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}}
@ -181,7 +181,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{/isBasicBasic}} {{/isBasicBasic}}
{{#isBasicBearer}} {{#isBasicBearer}}
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String = defaultBasePath, baseUrl: String = defaultBasePath,
okHttpClientBuilder: OkHttpClient.Builder? = null, okHttpClientBuilder: OkHttpClient.Builder? = null,
{{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}} {{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}}
@ -195,7 +195,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{/isBasic}} {{/isBasic}}
{{/authMethods}} {{/authMethods}}
{{#hasOAuthMethods}} {{#hasOAuthMethods}}
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String = defaultBasePath, baseUrl: String = defaultBasePath,
okHttpClientBuilder: OkHttpClient.Builder? = null, okHttpClientBuilder: OkHttpClient.Builder? = null,
{{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}} {{^kotlinx_serialization}}serializerBuilder: {{#gson}}GsonBuilder{{/gson}}{{#moshi}}Moshi.Builder{{/moshi}}{{#jackson}}ObjectMapper{{/jackson}} = Serializer.{{#gson}}gsonBuilder{{/gson}}{{#moshi}}moshiBuilder{{/moshi}}{{#jackson}}jacksonObjectMapper{{/jackson}},{{/kotlinx_serialization}}
@ -216,7 +216,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{#authMethods}} {{#authMethods}}
{{#isBasic}} {{#isBasic}}
{{#isBasicBasic}} {{#isBasicBasic}}
fun setCredentials(username: String, password: String): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setCredentials(username: String, password: String): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, HttpBasicAuth> { apiAuthorizations.values.runOnFirst<Interceptor, HttpBasicAuth> {
setCredentials(username, password) setCredentials(username, password)
} }
@ -231,7 +231,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{/isBasicBasic}} {{/isBasicBasic}}
{{^isBasicBasic}} {{^isBasicBasic}}
{{#hasOAuthMethods}} {{#hasOAuthMethods}}
fun setCredentials(username: String, password: String): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setCredentials(username: String, password: String): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
tokenRequestBuilder.setUsername(username).setPassword(password) tokenRequestBuilder.setUsername(username).setPassword(password)
} }
@ -240,7 +240,7 @@ import okhttp3.MediaType.Companion.toMediaType
{{/hasOAuthMethods}} {{/hasOAuthMethods}}
{{/isBasicBasic}} {{/isBasicBasic}}
{{#isBasicBearer}} {{#isBasicBearer}}
fun setBearerToken(bearerToken: String): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setBearerToken(bearerToken: String): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, HttpBearerAuth> { apiAuthorizations.values.runOnFirst<Interceptor, HttpBearerAuth> {
this.bearerToken = bearerToken this.bearerToken = bearerToken
} }
@ -256,7 +256,7 @@ import okhttp3.MediaType.Companion.toMediaType
* Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one) * Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one)
* @return Token request builder * @return Token request builder
*/ */
fun getTokenEndPoint(): TokenRequestBuilder? { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun getTokenEndPoint(): TokenRequestBuilder? {
var result: TokenRequestBuilder? = null var result: TokenRequestBuilder? = null
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
result = tokenRequestBuilder result = tokenRequestBuilder
@ -268,7 +268,7 @@ import okhttp3.MediaType.Companion.toMediaType
* Helper method to configure authorization endpoint of the first oauth found in the apiAuthorizations (there should be only one) * Helper method to configure authorization endpoint of the first oauth found in the apiAuthorizations (there should be only one)
* @return Authentication request builder * @return Authentication request builder
*/ */
fun getAuthorizationEndPoint(): AuthenticationRequestBuilder? { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun getAuthorizationEndPoint(): AuthenticationRequestBuilder? {
var result: AuthenticationRequestBuilder? = null var result: AuthenticationRequestBuilder? = null
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
result = authenticationRequestBuilder result = authenticationRequestBuilder
@ -281,7 +281,7 @@ import okhttp3.MediaType.Companion.toMediaType
* @param accessToken Access token * @param accessToken Access token
* @return ApiClient * @return ApiClient
*/ */
fun setAccessToken(accessToken: String): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setAccessToken(accessToken: String): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
setAccessToken(accessToken) setAccessToken(accessToken)
} }
@ -295,7 +295,7 @@ import okhttp3.MediaType.Companion.toMediaType
* @param redirectURI Redirect URI * @param redirectURI Redirect URI
* @return ApiClient * @return ApiClient
*/ */
fun configureAuthorizationFlow(clientId: String, clientSecret: String, redirectURI: String): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun configureAuthorizationFlow(clientId: String, clientSecret: String, redirectURI: String): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
tokenRequestBuilder tokenRequestBuilder
.setClientId(clientId) .setClientId(clientId)
@ -313,7 +313,7 @@ import okhttp3.MediaType.Companion.toMediaType
* @param accessTokenListener Access token listener * @param accessTokenListener Access token listener
* @return ApiClient * @return ApiClient
*/ */
fun registerAccessTokenListener(accessTokenListener: AccessTokenListener): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun registerAccessTokenListener(accessTokenListener: AccessTokenListener): ApiClient {
apiAuthorizations.values.runOnFirst<Interceptor, OAuth> { apiAuthorizations.values.runOnFirst<Interceptor, OAuth> {
registerAccessTokenListener(accessTokenListener) registerAccessTokenListener(accessTokenListener)
} }
@ -327,7 +327,7 @@ import okhttp3.MediaType.Companion.toMediaType
* @param authorization Authorization interceptor * @param authorization Authorization interceptor
* @return ApiClient * @return ApiClient
*/ */
fun addAuthorization(authName: String, authorization: Interceptor): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun addAuthorization(authName: String, authorization: Interceptor): ApiClient {
if (apiAuthorizations.containsKey(authName)) { if (apiAuthorizations.containsKey(authName)) {
throw RuntimeException("auth name $authName already in api authorizations") throw RuntimeException("auth name $authName already in api authorizations")
} }
@ -336,12 +336,12 @@ import okhttp3.MediaType.Companion.toMediaType
return this return this
} }
fun setLogger(logger: (String) -> Unit): ApiClient { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setLogger(logger: (String) -> Unit): ApiClient {
this.logger = logger this.logger = logger
return this return this
} }
fun <S> createService(serviceClass: Class<S>): S { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <S> createService(serviceClass: Class<S>): S {
val usedCallFactory = this.callFactory ?: clientBuilder.build() val usedCallFactory = this.callFactory ?: clientBuilder.build()
return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass) return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass)
} }
@ -353,7 +353,7 @@ import okhttp3.MediaType.Companion.toMediaType
* Gets the serializer builder. * Gets the serializer builder.
* @return serial builder * @return serial builder
*/ */
fun getSerializerBuilder(): GsonBuilder { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun getSerializerBuilder(): GsonBuilder {
return serializerBuilder return serializerBuilder
} }
@ -375,12 +375,12 @@ import okhttp3.MediaType.Companion.toMediaType
} }
} }
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
@JvmStatic @JvmStatic
protected val baseUrlKey = "{{packageName}}.baseUrl" protected val baseUrlKey: String = "{{packageName}}.baseUrl"
@JvmStatic @JvmStatic
val defaultBasePath: String by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultBasePath: String by lazy {
System.getProperties().getProperty(baseUrlKey, "{{{basePath}}}") System.getProperties().getProperty(baseUrlKey, "{{{basePath}}}")
} }
} }
@ -395,7 +395,7 @@ import okhttp3.MediaType.Companion.toMediaType
* @param gsonBuilder gson builder * @param gsonBuilder gson builder
* @return GSON builder * @return GSON builder
*/ */
fun registerTypeAdapterFactoryForAllModels(gsonBuilder: GsonBuilder): GsonBuilder { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun registerTypeAdapterFactoryForAllModels(gsonBuilder: GsonBuilder): GsonBuilder {
{{#models}} {{#models}}
{{#model}} {{#model}}
{{^isEnum}} {{^isEnum}}

View File

@ -1,16 +1,16 @@
package {{packageName}}.infrastructure package {{packageName}}.infrastructure
class CollectionFormats { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class CollectionFormats {
open class CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class CSVParams {
var params: List<String> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var params: List<String>
constructor(params: List<String>) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) {
this.params = params this.params = params
} }
constructor(vararg params: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) {
this.params = listOf(*params) this.params = listOf(*params)
} }
@ -19,38 +19,38 @@ class CollectionFormats {
} }
} }
open class SSVParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class SSVParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString(" ") return params.joinToString(" ")
} }
} }
class TSVParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class TSVParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString("\t") return params.joinToString("\t")
} }
} }
class PIPESParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class PIPESParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString("|") return params.joinToString("|")
} }
} }
class SPACEParams : SSVParams() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class SPACEParams : SSVParams()
} }

View File

@ -12,7 +12,7 @@ import retrofit2.Response
{{#moshi}} {{#moshi}}
@Throws(JsonDataException::class) @Throws(JsonDataException::class)
inline fun <reified T> Response<*>.getErrorResponse(serializerBuilder: Moshi.Builder = Serializer.moshiBuilder): T? { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T> Response<*>.getErrorResponse(serializerBuilder: Moshi.Builder = Serializer.moshiBuilder): T? {
val serializer = serializerBuilder.build() val serializer = serializerBuilder.build()
val parser = serializer.adapter(T::class.java) val parser = serializer.adapter(T::class.java)
val response = errorBody()?.string() val response = errorBody()?.string()
@ -24,7 +24,7 @@ inline fun <reified T> Response<*>.getErrorResponse(serializerBuilder: Moshi.Bui
{{/moshi}} {{/moshi}}
{{#gson}} {{#gson}}
@Throws(JsonParseException::class) @Throws(JsonParseException::class)
inline fun <reified T> Response<*>.getErrorResponse(serializerBuilder: GsonBuilder = Serializer.gsonBuilder): T? { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T> Response<*>.getErrorResponse(serializerBuilder: GsonBuilder = Serializer.gsonBuilder): T? {
val serializer = serializerBuilder.create() val serializer = serializerBuilder.create()
val reader = errorBody()?.charStream() val reader = errorBody()?.charStream()
if (reader != null) { if (reader != null) {

View File

@ -20,10 +20,10 @@ import org.springframework.http.MediaType
import {{packageName}}.infrastructure.* import {{packageName}}.infrastructure.*
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}}(client: RestClient) : ApiClient(client) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class {{classname}}(client: RestClient) : ApiClient(client) {
{{#jackson}} {{#jackson}}
constructor(baseUrl: String) : this(RestClient.builder() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(baseUrl: String) : this(RestClient.builder()
.baseUrl(baseUrl) .baseUrl(baseUrl)
.messageConverters { it.add(MappingJackson2HttpMessageConverter()) } .messageConverters { it.add(MappingJackson2HttpMessageConverter()) }
.build() .build()
@ -36,7 +36,7 @@ import {{packageName}}.infrastructure.*
/** /**
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -66,7 +66,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}} { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}} {
{{#returnType}}val result = {{/returnType}}{{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) {{#returnType}}val result = {{/returnType}}{{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
{{#returnType}} {{#returnType}}
return result.body!! return result.body!!
@ -77,7 +77,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): ResponseEntity<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): ResponseEntity<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> {
val localVariableConfig = {{operationId}}RequestConfig({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) val localVariableConfig = {{operationId}}RequestConfig({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
return request<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}, {{{returnType}}}{{^returnType}}Unit{{/returnType}}>( return request<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}, {{{returnType}}}{{^returnType}}Unit{{/returnType}}>(
localVariableConfig localVariableConfig
@ -87,7 +87,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> {
val localVariableBody = {{#hasBodyParam}}{{! val localVariableBody = {{#hasBodyParam}}{{!
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!

View File

@ -8,7 +8,7 @@ import org.springframework.web.client.RestClient
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import org.springframework.util.LinkedMultiValueMap import org.springframework.util.LinkedMultiValueMap
open class ApiClient(protected val client: RestClient) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: RestClient) {
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): ResponseEntity<T> { protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): ResponseEntity<T> {
return prepare(defaults(requestConfig)) return prepare(defaults(requestConfig))
@ -50,7 +50,7 @@ open class ApiClient(protected val client: RestClient) {
apply { if (requestConfig.body != null) body(requestConfig.body) } apply { if (requestConfig.body != null) body(requestConfig.body) }
} }
inline fun <reified T: Any> parseDateToQueryString(value : T): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T: Any> parseDateToQueryString(value : T): String {
{{#toJson}} {{#toJson}}
/* /*
.replace("\"", "") converts the json object string to an actual string for the query parameter. .replace("\"", "") converts the json object string to an actual string for the query parameter.

View File

@ -21,10 +21,10 @@ import org.springframework.util.LinkedMultiValueMap
import {{packageName}}.infrastructure.* import {{packageName}}.infrastructure.*
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}}(client: WebClient) : ApiClient(client) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class {{classname}}(client: WebClient) : ApiClient(client) {
{{#jackson}} {{#jackson}}
constructor(baseUrl: String) : this(WebClient.builder() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(baseUrl: String) : this(WebClient.builder()
.baseUrl(baseUrl) .baseUrl(baseUrl)
.codecs { .codecs {
it.defaultCodecs().jackson2JsonEncoder(Jackson2JsonEncoder(Serializer.jacksonObjectMapper, MediaType.APPLICATION_JSON)) it.defaultCodecs().jackson2JsonEncoder(Jackson2JsonEncoder(Serializer.jacksonObjectMapper, MediaType.APPLICATION_JSON))
@ -40,7 +40,7 @@ import {{packageName}}.infrastructure.*
/** /**
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -70,7 +70,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Mono<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Mono<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> {
return {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) return {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
.map { {{#returnType}}it.body{{/returnType}}{{^returnType}}Unit{{/returnType}} } .map { {{#returnType}}it.body{{/returnType}}{{^returnType}}Unit{{/returnType}} }
} }
@ -79,7 +79,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Mono<ResponseEntity<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}>> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Mono<ResponseEntity<{{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}}>> {
val localVariableConfig = {{operationId}}RequestConfig({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) val localVariableConfig = {{operationId}}RequestConfig({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
return request<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}, {{{returnType}}}{{^returnType}}Unit{{/returnType}}>( return request<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}, {{{returnType}}}{{^returnType}}Unit{{/returnType}}>(
localVariableConfig localVariableConfig
@ -89,7 +89,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{#defaultValue}} = {{>param_default_value}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map<String, PartConfig<*>>{{/hasFormParams}}{{/hasBodyParam}}> {
val localVariableBody = {{#hasBodyParam}}{{! val localVariableBody = {{#hasBodyParam}}{{!
}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{! }}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{!
}}{{^hasFormParams}}null{{/hasFormParams}}{{! }}{{^hasFormParams}}null{{/hasFormParams}}{{!

View File

@ -10,7 +10,7 @@ import org.springframework.http.client.MultipartBodyBuilder
import org.springframework.util.LinkedMultiValueMap import org.springframework.util.LinkedMultiValueMap
import reactor.core.publisher.Mono import reactor.core.publisher.Mono
open class ApiClient(protected val client: WebClient) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: WebClient) {
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> { protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> {
return prepare(defaults(requestConfig)) return prepare(defaults(requestConfig))
@ -68,7 +68,7 @@ open class ApiClient(protected val client: WebClient) {
} }
} }
inline fun <reified T: Any> parseDateToQueryString(value : T): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T: Any> parseDateToQueryString(value : T): String {
{{#toJson}} {{#toJson}}
/* /*
.replace("\"", "") converts the json object string to an actual string for the query parameter. .replace("\"", "") converts the json object string to an actual string for the query parameter.

View File

@ -37,14 +37,14 @@ import {{packageName}}.infrastructure.*
@Suppress ("UNUSED") @Suppress ("UNUSED")
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}}(basePath: kotlin.String = ApiClient.defaultBasePath, accessToken: String? = null, apiKey: MutableMap<String, String> = mutableMapOf(), apiKeyPrefix: MutableMap<String, String> = mutableMapOf(), username: String? = null, password: String? = null, vertx: Vertx): ApiClient(basePath, accessToken, apiKey, apiKeyPrefix, username, password, vertx) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class {{classname}}(basePath: kotlin.String = ApiClient.defaultBasePath, accessToken: String? = null, apiKey: MutableMap<String, String> = mutableMapOf(), apiKeyPrefix: MutableMap<String, String> = mutableMapOf(), username: String? = null, password: String? = null, vertx: Vertx): ApiClient(basePath, accessToken, apiKey, apiKeyPrefix, username, password, vertx) {
{{#operation}} {{#operation}}
{{#allParams}} {{#allParams}}
{{#isEnum}} {{#isEnum}}
/** /**
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -103,7 +103,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
{{#useCoroutines}}suspend {{/useCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{^useCoroutines}}Future<{{/useCoroutines}}{{#returnType}}{{{returnType}}}{{#nullableReturnType}}{{^isResponseOptional}}?{{/isResponseOptional}}{{/nullableReturnType}}{{#isResponseOptional}}?{{/isResponseOptional}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^useCoroutines}}>{{/useCoroutines}} { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#useCoroutines}}suspend {{/useCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{^useCoroutines}}Future<{{/useCoroutines}}{{#returnType}}{{{returnType}}}{{#nullableReturnType}}{{^isResponseOptional}}?{{/isResponseOptional}}{{/nullableReturnType}}{{#isResponseOptional}}?{{/isResponseOptional}}{{/returnType}}{{^returnType}}Unit{{/returnType}}{{^useCoroutines}}>{{/useCoroutines}} {
return {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}).map { localVarResponse -> return {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}).map { localVarResponse ->
when (localVarResponse.responseType) { when (localVarResponse.responseType) {
ResponseType.Success -> {{#returnType}}(localVarResponse as Success<*>).data as {{{returnType}}}{{#nullableReturnType}}{{^isResponseOptional}}?{{/isResponseOptional}}{{/nullableReturnType}}{{#isResponseOptional}}?{{/isResponseOptional}}{{/returnType}}{{^returnType}}Unit{{/returnType}} ResponseType.Success -> {{#returnType}}(localVarResponse as Success<*>).data as {{{returnType}}}{{#nullableReturnType}}{{^isResponseOptional}}?{{/isResponseOptional}}{{/nullableReturnType}}{{#isResponseOptional}}?{{/isResponseOptional}}{{/returnType}}{{^returnType}}Unit{{/returnType}}
@ -134,7 +134,7 @@ import {{packageName}}.infrastructure.*
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated(message = "This operation is deprecated.") @Deprecated(message = "This operation is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun {{operationId}}WithHttpInfo({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : Future<ApiResponse<{{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit?{{/returnType}}>> {
val vertxClient = WebClient.create(vertx) val vertxClient = WebClient.create(vertx)
val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{{path}}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}})) val request = vertxClient.requestAbs(HttpMethod.{{httpMethod}}, UriTemplate.of("$basePath{{{path}}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}{{^required}}?{{/required}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}}))

View File

@ -10,12 +10,12 @@ import com.fasterxml.jackson.core.type.TypeReference
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
{{/gson}} {{/gson}}
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient(val basePath: kotlin.String = defaultBasePath, val accessToken: String? = null, val apiKey: MutableMap<String, String> = mutableMapOf(), val apiKeyPrefix: MutableMap<String, String> = mutableMapOf(), var username: String? = null, var password: String? = null, val vertx: Vertx) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(val basePath: kotlin.String = defaultBasePath, val accessToken: String? = null, val apiKey: MutableMap<String, String> = mutableMapOf(), val apiKeyPrefix: MutableMap<String, String> = mutableMapOf(), var username: String? = null, var password: String? = null, val vertx: Vertx) {
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
const val baseUrlKey = "{{packageName}}.baseUrl" {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}const val baseUrlKey: String = "{{packageName}}.baseUrl"
@JvmStatic @JvmStatic
val defaultBasePath: String by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val defaultBasePath: String by lazy {
System.getProperties().getProperty(baseUrlKey, "{{{basePath}}}") System.getProperties().getProperty(baseUrlKey, "{{{basePath}}}")
} }
} }

View File

@ -1,43 +1,43 @@
package {{packageName}}.infrastructure package {{packageName}}.infrastructure
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class ResponseType { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class ResponseType {
Success, Informational, Redirection, ClientError, ServerError Success, Informational, Redirection, ClientError, ServerError
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}interface Response {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface Response
{{#nonPublicApi}}internal {{/nonPublicApi}}abstract class ApiResponse<T>(val responseType: ResponseType): Response { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract class ApiResponse<T>({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val responseType: ResponseType): Response {
abstract val statusCode: Int {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract val statusCode: Int
abstract val headers: Map<String,List<String>> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}abstract val headers: Map<String,List<String>>
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class Success<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Success<T>(
val data: T{{#nullableReturnType}}?{{/nullableReturnType}}, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val data: T{{#nullableReturnType}}?{{/nullableReturnType}},
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
): ApiResponse<T>(ResponseType.Success) ): ApiResponse<T>(ResponseType.Success)
{{#nonPublicApi}}internal {{/nonPublicApi}}class Informational<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Informational<T>(
val statusText: String, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val statusText: String,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.Informational) ) : ApiResponse<T>(ResponseType.Informational)
{{#nonPublicApi}}internal {{/nonPublicApi}}class Redirection<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class Redirection<T>(
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.Redirection) ) : ApiResponse<T>(ResponseType.Redirection)
{{#nonPublicApi}}internal {{/nonPublicApi}}class ClientError<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ClientError<T>(
val message: String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val message: String? = null,
val body: Any? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val body: Any? = null,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> = mapOf() override val headers: Map<String, List<String>> = mapOf()
) : ApiResponse<T>(ResponseType.ClientError) ) : ApiResponse<T>(ResponseType.ClientError)
{{#nonPublicApi}}internal {{/nonPublicApi}}class ServerError<T>( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ServerError<T>(
val message: String? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val message: String? = null,
val body: Any? = null, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val body: Any? = null,
override val statusCode: Int = -1, override val statusCode: Int = -1,
override val headers: Map<String, List<String>> override val headers: Map<String, List<String>>
): ApiResponse<T>(ResponseType.ServerError) ): ApiResponse<T>(ResponseType.ServerError)

View File

@ -3,16 +3,16 @@ package {{packageName}}.infrastructure
import java.lang.RuntimeException import java.lang.RuntimeException
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ClientException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ClientException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private const val serialVersionUID: Long = 123L private const val serialVersionUID: Long = 123L
} }
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ServerException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ServerException(message: kotlin.String? = null, val statusCode: Int = -1, val response: Response? = null) : RuntimeException(message) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private const val serialVersionUID: Long = 456L private const val serialVersionUID: Long = 456L
} }
} }

View File

@ -26,7 +26,7 @@ import {{packageName}}.infrastructure.CollectionFormats.*
* can pass that to the request queue like: * can pass that to the request queue like:
* Volley.newRequestQueue(context.applicationContext, myCustomHttpStack) * Volley.newRequestQueue(context.applicationContext, myCustomHttpStack)
*/ */
class {{classname}} ( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class {{classname}} (
private val context: Context, private val context: Context,
private val requestQueue: Lazy<RequestQueue> = lazy(initializer = { private val requestQueue: Lazy<RequestQueue> = lazy(initializer = {
Volley.newRequestQueue(context.applicationContext) Volley.newRequestQueue(context.applicationContext)
@ -45,7 +45,7 @@ class {{classname}} (
{{#isDeprecated}} {{#isDeprecated}}
@Deprecated("This api was deprecated") @Deprecated("This api was deprecated")
{{/isDeprecated}} {{/isDeprecated}}
suspend fun {{operationId}}({{^allParams}}){{/allParams}}{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{#-last}}{{#operationAuthMethod}}, opAuthHeaderFactory = () -> map<String, String>{{/operationAuthMethod}}){{/-last}}{{/allParams}}: {{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit{{/returnType}} { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun {{operationId}}({{^allParams}}){{/allParams}}{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{#-last}}{{#operationAuthMethod}}, opAuthHeaderFactory = () -> map<String, String>{{/operationAuthMethod}}){{/-last}}{{/allParams}}: {{#returnType}}{{{returnType}}}?{{/returnType}}{{^returnType}}Unit{{/returnType}} {
{{#bodyParam}} {{#bodyParam}}
val body: Any? = {{paramName}} val body: Any? = {{paramName}}
{{/bodyParam}} {{/bodyParam}}

View File

@ -3,7 +3,7 @@
// TODO: Not sure about cookie auth form // TODO: Not sure about cookie auth form
// If implementing api key in query parameter use the ^isKeyInHeader property // If implementing api key in query parameter use the ^isKeyInHeader property
val apiKeyAuthHeaderFactoryBuilder = { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val apiKeyAuthHeaderFactoryBuilder = {
paramName: String, apiKeyPrefix: String?, apiKey: String? -> { paramName: String, apiKeyPrefix: String?, apiKey: String? -> {
mapOf(paramName to mapOf(paramName to
if (apiKeyPrefix != null) { if (apiKeyPrefix != null) {

View File

@ -1,3 +1,3 @@
val basicAuthHeaderFactoryBuilder = { username: String?, password: String? -> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val basicAuthHeaderFactoryBuilder = { username: String?, password: String? ->
{ mapOf("Authorization" to "Basic " + Base64.encodeToString("${username ?: ""}:${password ?: ""}".toByteArray(), Base64.DEFAULT))} { mapOf("Authorization" to "Basic " + Base64.encodeToString("${username ?: ""}:${password ?: ""}".toByteArray(), Base64.DEFAULT))}
} }

View File

@ -1,4 +1,4 @@
val basicAuthHeaderFactoryBuilder = { username: String?, password: String? -> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val basicAuthHeaderFactoryBuilder = { username: String?, password: String? ->
{ {
throw NotImplementedError("OAuth security scheme header factory not implemented yet - see open api generator auth/oauth.mustache") throw NotImplementedError("OAuth security scheme header factory not implemented yet - see open api generator auth/oauth.mustache")
mapOf("" to "")} mapOf("" to "")}

View File

@ -1,16 +1,16 @@
package {{packageName}}.infrastructure package {{packageName}}.infrastructure
class CollectionFormats { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class CollectionFormats {
open class CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class CSVParams {
var params: List<String> {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var params: List<String>
constructor(params: List<String>) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) {
this.params = params this.params = params
} }
constructor(vararg params: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) {
this.params = listOf(*params) this.params = listOf(*params)
} }
@ -19,38 +19,38 @@ class CollectionFormats {
} }
} }
open class SSVParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class SSVParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString(" ") return params.joinToString(" ")
} }
} }
class TSVParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class TSVParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString("\t") return params.joinToString("\t")
} }
} }
class PIPESParams : CSVParams { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class PIPESParams : CSVParams {
constructor(params: List<String>) : super(params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(params: List<String>) : super(params)
constructor(vararg params: String) : super(*params) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(vararg params: String) : super(*params)
override fun toString(): String { override fun toString(): String {
return params.joinToString("|") return params.joinToString("|")
} }
} }
class SPACEParams : SSVParams() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class SPACEParams : SSVParams()
} }

View File

@ -4,6 +4,6 @@ package {{packageName}}.infrastructure
import {{roomModelPackage}}.* import {{roomModelPackage}}.*
// TODO ITransformForStorage // TODO ITransformForStorage
interface ITransformForStorage<T> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface ITransformForStorage<T> {
fun toRoomModel(): T {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun toRoomModel(): T
} }

View File

@ -21,7 +21,7 @@ import {{packageName}}.infrastructure.LocalDateTimeAdapter
import {{packageName}}.infrastructure.LocalDateAdapter import {{packageName}}.infrastructure.LocalDateAdapter
import {{packageName}}.infrastructure.ByteArrayAdapter import {{packageName}}.infrastructure.ByteArrayAdapter
class GsonRequest<T>( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class GsonRequest<T>(
method: Int, method: Int,
url: String, url: String,
private val body: Any?, private val body: Any?,
@ -35,7 +35,7 @@ class GsonRequest<T>(
errorListener: Response.ErrorListener errorListener: Response.ErrorListener
) : Request<T>(method, url, errorListener) { ) : Request<T>(method, url, errorListener) {
val gsonBuilder: GsonBuilder = GsonBuilder() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val gsonBuilder: GsonBuilder = GsonBuilder()
.registerTypeAdapter(OffsetDateTime::class.java, OffsetDateTimeAdapter()) .registerTypeAdapter(OffsetDateTime::class.java, OffsetDateTimeAdapter())
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter()) .registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
.registerTypeAdapter(LocalDate::class.java, LocalDateAdapter()) .registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
@ -46,7 +46,7 @@ class GsonRequest<T>(
} }
} }
val gson: Gson by lazy { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val gson: Gson by lazy {
gsonBuilder.create() gsonBuilder.create()
} }

View File

@ -13,17 +13,17 @@ import java.time.OffsetDateTime
import java.time.LocalDate import java.time.LocalDate
interface IRequestFactory { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface IRequestFactory {
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
/** /**
* ISO 8601 date time format. * ISO 8601 date time format.
* @see https://en.wikipedia.org/wiki/ISO_8601 * @see https://en.wikipedia.org/wiki/ISO_8601
*/ */
fun formatDateTime(datetime: OffsetDateTime) = DateTimeFormatter.ISO_INSTANT.format(datetime) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun formatDateTime(datetime: OffsetDateTime) = DateTimeFormatter.ISO_INSTANT.format(datetime)
fun formatDate(date: LocalDate) = DateTimeFormatter.ISO_LOCAL_DATE.format(date) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun formatDate(date: LocalDate) = DateTimeFormatter.ISO_LOCAL_DATE.format(date)
fun escapeString(str: String): String { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun escapeString(str: String): String {
return try { return try {
URLEncoder.encode(str, "UTF-8") URLEncoder.encode(str, "UTF-8")
} catch (e: UnsupportedEncodingException) { } catch (e: UnsupportedEncodingException) {
@ -31,7 +31,7 @@ interface IRequestFactory {
} }
} }
fun parameterToString(param: Any?) = {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun parameterToString(param: Any?) =
when (param) { when (param) {
null -> "" null -> ""
is OffsetDateTime -> formatDateTime(param) is OffsetDateTime -> formatDateTime(param)
@ -50,7 +50,7 @@ interface IRequestFactory {
} }
fun <T> build( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T> build(
method: Int, method: Int,
url : String, url : String,
body: Any?, body: Any?,

View File

@ -12,7 +12,7 @@ import java.lang.reflect.Type
import java.util.Locale import java.util.Locale
import java.util.UUID import java.util.UUID
class RequestFactory(private val headerFactories : List<() -> Map<String, String>> = listOf(), private val postProcessors :List <(Request<*>) -> Unit> = listOf(), private val gsonAdapters: Map<Type, Any> = mapOf()): IRequestFactory { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class RequestFactory(private val headerFactories : List<() -> Map<String, String>> = listOf(), private val postProcessors :List <(Request<*>) -> Unit> = listOf(), private val gsonAdapters: Map<Type, Any> = mapOf()): IRequestFactory {
{{#hasAuthMethods}} {{#hasAuthMethods}}
{{>auth/authentication}} {{>auth/authentication}}

View File

@ -16,16 +16,16 @@ import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.* import kotlinx.serialization.encoding.*
{{#operations}} {{#operations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}open class {{classname}} : ApiClient { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class {{classname}} : ApiClient {
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}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
) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer) ) : super(baseUrl = baseUrl, httpClientEngine = httpClientEngine, httpClientConfig = httpClientConfig, jsonBlock = jsonSerializer)
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String, baseUrl: String,
httpClient: HttpClient httpClient: HttpClient
): super(baseUrl = baseUrl, httpClient = httpClient) ): super(baseUrl = baseUrl, httpClient = httpClient)
@ -38,7 +38,7 @@ import kotlinx.serialization.encoding.*
* enum for parameter {{paramName}} * enum for parameter {{paramName}}
*/ */
@Serializable @Serializable
{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{enumName}}{{operationIdCamelCase}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) {
{{^enumUnknownDefaultCase}} {{^enumUnknownDefaultCase}}
{{#allowableValues}}{{#enumVars}} {{#allowableValues}}{{#enumVars}}
@SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) @SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}})
@ -64,7 +64,7 @@ import kotlinx.serialization.encoding.*
{{#returnType}} {{#returnType}}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
{{/returnType}} {{/returnType}}
open suspend fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{defaultValue}}}.toDouble(){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{defaultValue}}}.toDouble(){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): HttpResponse<{{{returnType}}}{{^returnType}}Unit{{/returnType}}> { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open suspend fun {{operationId}}({{#allParams}}{{{paramName}}}: {{#isEnum}}{{#isContainer}}kotlin.collections.List<{{enumName}}{{operationIdCamelCase}}>{{/isContainer}}{{^isContainer}}{{enumName}}{{operationIdCamelCase}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{defaultValue}}}.toDouble(){{/isNumber}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{^isNumber}}{{#isEnum}}{{enumName}}{{operationIdCamelCase}}.{{enumDefaultValue}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/isNumber}}{{#isNumber}}{{{defaultValue}}}.toDouble(){{/isNumber}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): HttpResponse<{{{returnType}}}{{^returnType}}Unit{{/returnType}}> {
val localVariableAuthNames = listOf<String>({{#authMethods}}"{{name}}"{{^-last}}, {{/-last}}{{/authMethods}}) val localVariableAuthNames = listOf<String>({{#authMethods}}"{{name}}"{{^-last}}, {{/-last}}{{/authMethods}})

View File

@ -1,8 +1,8 @@
package {{packageName}}.auth package {{packageName}}.auth
class ApiKeyAuth(private val location: String, val paramName: String) : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class ApiKeyAuth(private val location: String, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val paramName: String) : Authentication {
var apiKey: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var apiKey: String? = null
var apiKeyPrefix: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var apiKeyPrefix: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val key: String = apiKey ?: return val key: String = apiKey ?: return

View File

@ -1,6 +1,6 @@
package {{packageName}}.auth package {{packageName}}.auth
interface Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface Authentication {
/** /**
* Apply authentication settings to header and query params. * Apply authentication settings to header and query params.
@ -8,6 +8,6 @@ interface Authentication {
* @param query Query parameters. * @param query Query parameters.
* @param headers Header parameters. * @param headers Header parameters.
*/ */
fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>)
} }

View File

@ -3,9 +3,9 @@ package {{packageName}}.auth
import io.ktor.util.InternalAPI import io.ktor.util.InternalAPI
import io.ktor.util.encodeBase64 import io.ktor.util.encodeBase64
class HttpBasicAuth : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBasicAuth : Authentication {
var username: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var username: String? = null
var password: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var password: String? = null
@OptIn(InternalAPI::class) @OptIn(InternalAPI::class)
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {

View File

@ -1,7 +1,7 @@
package {{packageName}}.auth package {{packageName}}.auth
class HttpBearerAuth(private val scheme: String?) : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class HttpBearerAuth(private val scheme: String?) : Authentication {
var bearerToken: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var bearerToken: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val token: String = bearerToken ?: return val token: String = bearerToken ?: return

View File

@ -1,7 +1,7 @@
package {{packageName}}.auth package {{packageName}}.auth
class OAuth : Authentication { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class OAuth : Authentication {
var accessToken: String? = null {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}var accessToken: String? = null
override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) { override fun apply(query: MutableMap<String, List<String>>, headers: MutableMap<String, String>) {
val token: String = accessToken ?: return val token: String = accessToken ?: return

View File

@ -18,6 +18,10 @@ repositories {
} }
kotlin { kotlin {
{{#explicitApi}}
explicitApi()
{{/explicitApi}}
jvm() jvm()
iosX64() iosX64()
iosArm64() iosArm64()

View File

@ -20,13 +20,13 @@ import kotlinx.serialization.json.Json
import {{packageName}}.auth.* import {{packageName}}.auth.*
{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient( {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(
private val baseUrl: String private val baseUrl: String
) { ) {
private lateinit var client: HttpClient private lateinit var client: HttpClient
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String, baseUrl: String,
httpClientEngine: HttpClientEngine?, httpClientEngine: HttpClientEngine?,
httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null, httpClientConfig: ((HttpClientConfig<*>) -> Unit)? = null,
@ -42,7 +42,7 @@ import {{packageName}}.auth.*
client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) client = httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig)
} }
constructor( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}constructor(
baseUrl: String, baseUrl: String,
httpClient: HttpClient httpClient: HttpClient
): this(baseUrl = baseUrl) { ): this(baseUrl = baseUrl) {
@ -62,14 +62,14 @@ import {{packageName}}.auth.*
private val authentications: kotlin.collections.Map<String, Authentication>? = null private val authentications: kotlin.collections.Map<String, Authentication>? = null
{{/hasAuthMethods}} {{/hasAuthMethods}}
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
const val BASE_URL = "{{{basePath}}}" {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}const val BASE_URL: String = "{{{basePath}}}"
val JSON_DEFAULT = Json { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val JSON_DEFAULT: Json = Json {
ignoreUnknownKeys = true ignoreUnknownKeys = true
prettyPrint = true prettyPrint = true
isLenient = true isLenient = true
} }
protected val UNSAFE_HEADERS = listOf(HttpHeaders.ContentType) protected val UNSAFE_HEADERS: List<String> = listOf(HttpHeaders.ContentType)
} }
/** /**
@ -77,7 +77,7 @@ import {{packageName}}.auth.*
* *
* @param username Username * @param username Username
*/ */
fun setUsername(username: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setUsername(username: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth? val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth?
?: throw Exception("No HTTP basic authentication configured") ?: throw Exception("No HTTP basic authentication configured")
auth.username = username auth.username = username
@ -88,7 +88,7 @@ import {{packageName}}.auth.*
* *
* @param password Password * @param password Password
*/ */
fun setPassword(password: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setPassword(password: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth? val auth = authentications?.values?.firstOrNull { it is HttpBasicAuth } as HttpBasicAuth?
?: throw Exception("No HTTP basic authentication configured") ?: throw Exception("No HTTP basic authentication configured")
auth.password = password auth.password = password
@ -100,7 +100,7 @@ import {{packageName}}.auth.*
* @param apiKey API key * @param apiKey API key
* @param paramName The name of the API key parameter, or null or set the first key. * @param paramName The name of the API key parameter, or null or set the first key.
*/ */
fun setApiKey(apiKey: String, paramName: String? = null) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setApiKey(apiKey: String, paramName: String? = null) {
val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName)} as ApiKeyAuth? val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName)} as ApiKeyAuth?
?: throw Exception("No API key authentication configured") ?: throw Exception("No API key authentication configured")
auth.apiKey = apiKey auth.apiKey = apiKey
@ -112,7 +112,7 @@ import {{packageName}}.auth.*
* @param apiKeyPrefix API key prefix * @param apiKeyPrefix API key prefix
* @param paramName The name of the API key parameter, or null or set the first key. * @param paramName The name of the API key parameter, or null or set the first key.
*/ */
fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) {
val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName) } as ApiKeyAuth? val auth = authentications?.values?.firstOrNull { it is ApiKeyAuth && (paramName == null || paramName == it.paramName) } as ApiKeyAuth?
?: throw Exception("No API key authentication configured") ?: throw Exception("No API key authentication configured")
auth.apiKeyPrefix = apiKeyPrefix auth.apiKeyPrefix = apiKeyPrefix
@ -123,7 +123,7 @@ import {{packageName}}.auth.*
* *
* @param accessToken Access token * @param accessToken Access token
*/ */
fun setAccessToken(accessToken: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setAccessToken(accessToken: String) {
val auth = authentications?.values?.firstOrNull { it is OAuth } as OAuth? val auth = authentications?.values?.firstOrNull { it is OAuth } as OAuth?
?: throw Exception("No OAuth2 authentication configured") ?: throw Exception("No OAuth2 authentication configured")
auth.accessToken = accessToken auth.accessToken = accessToken
@ -134,7 +134,7 @@ import {{packageName}}.auth.*
* *
* @param bearerToken The bearer token. * @param bearerToken The bearer token.
*/ */
fun setBearerToken(bearerToken: String) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun setBearerToken(bearerToken: String) {
val auth = authentications?.values?.firstOrNull { it is HttpBearerAuth } as HttpBearerAuth? val auth = authentications?.values?.firstOrNull { it is HttpBearerAuth } as HttpBearerAuth?
?: throw Exception("No Bearer authentication configured") ?: throw Exception("No Bearer authentication configured")
auth.bearerToken = bearerToken auth.bearerToken = bearerToken

View File

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

View File

@ -5,14 +5,14 @@ import io.ktor.http.isSuccess
import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.TypeInfo
import io.ktor.util.reflect.typeInfo import io.ktor.util.reflect.typeInfo
{{#nonPublicApi}}internal {{/nonPublicApi}}open class HttpResponse<T : Any>(val response: io.ktor.client.statement.HttpResponse, val provider: BodyProvider<T>) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class HttpResponse<T : Any>({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val response: io.ktor.client.statement.HttpResponse, {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val provider: BodyProvider<T>) {
val status: Int = response.status.value {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val status: Int = response.status.value
val success: Boolean = response.status.isSuccess() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val success: Boolean = response.status.isSuccess()
val headers: Map<String, List<String>> = response.headers.mapEntries() {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val headers: Map<String, List<String>> = response.headers.mapEntries()
suspend fun body(): T = provider.body(response) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun body(): T = provider.body(response)
suspend fun <V : Any> typedBody(type: TypeInfo): V = provider.typedBody(response, type) {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun <V : Any> typedBody(type: TypeInfo): V = provider.typedBody(response, type)
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
private fun Headers.mapEntries(): Map<String, List<String>> { private fun Headers.mapEntries(): Map<String, List<String>> {
val result = mutableMapOf<String, List<String>>() val result = mutableMapOf<String, List<String>>()
entries().forEach { result[it.key] = it.value } entries().forEach { result[it.key] = it.value }
@ -21,12 +21,12 @@ import io.ktor.util.reflect.typeInfo
} }
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}interface BodyProvider<T : Any> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}interface BodyProvider<T : Any> {
suspend fun body(response: io.ktor.client.statement.HttpResponse): T {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun body(response: io.ktor.client.statement.HttpResponse): T
suspend fun <V : Any> typedBody(response: io.ktor.client.statement.HttpResponse, type: TypeInfo): V {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}suspend fun <V : Any> typedBody(response: io.ktor.client.statement.HttpResponse, type: TypeInfo): V
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class TypedBodyProvider<T : Any>(private val type: TypeInfo) : BodyProvider<T> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class TypedBodyProvider<T : Any>(private val type: TypeInfo) : BodyProvider<T> {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override suspend fun body(response: io.ktor.client.statement.HttpResponse): T = override suspend fun body(response: io.ktor.client.statement.HttpResponse): T =
response.call.body(type) as T response.call.body(type) as T
@ -36,7 +36,7 @@ import io.ktor.util.reflect.typeInfo
response.call.body(type) as V response.call.body(type) as V
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}class MappedBodyProvider<S : Any, T : Any>(private val provider: BodyProvider<S>, private val block: S.() -> T) : BodyProvider<T> { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class MappedBodyProvider<S : Any, T : Any>(private val provider: BodyProvider<S>, private val block: S.() -> T) : BodyProvider<T> {
override suspend fun body(response: io.ktor.client.statement.HttpResponse): T = override suspend fun body(response: io.ktor.client.statement.HttpResponse): T =
block(provider.body(response)) block(provider.body(response))
@ -44,8 +44,8 @@ import io.ktor.util.reflect.typeInfo
provider.typedBody(response, type) provider.typedBody(response, type)
} }
{{#nonPublicApi}}internal {{/nonPublicApi}}inline fun <reified T : Any> io.ktor.client.statement.HttpResponse.wrap(): HttpResponse<T> = {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}inline fun <reified T : Any> io.ktor.client.statement.HttpResponse.wrap(): HttpResponse<T> =
HttpResponse(this, TypedBodyProvider(typeInfo<T>())) HttpResponse(this, TypedBodyProvider(typeInfo<T>()))
{{#nonPublicApi}}internal {{/nonPublicApi}}fun <T : Any, V : Any> HttpResponse<T>.map(block: T.() -> V): HttpResponse<V> = {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun <T : Any, V : Any> HttpResponse<T>.map(block: T.() -> V): HttpResponse<V> =
HttpResponse(response, MappedBodyProvider(provider, block)) HttpResponse(response, MappedBodyProvider(provider, block))

View File

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

View File

@ -1,9 +1,9 @@
@Serializable({{operationIdCamelCase}}Request.Companion::class) @Serializable({{operationIdCamelCase}}Request.Companion::class)
private class {{operationIdCamelCase}}Request(val value: List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>) { private class {{operationIdCamelCase}}Request(val value: List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Request> { companion object : KSerializer<{{operationIdCamelCase}}Request> {
private val serializer: KSerializer<List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>> = serializer<List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>>() private val serializer: KSerializer<List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>> = serializer<List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>>()
override val descriptor = serializer.descriptor override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, obj.value) override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder))
} }
} }

View File

@ -1,9 +1,9 @@
@Serializable({{operationIdCamelCase}}Request.Companion::class) @Serializable({{operationIdCamelCase}}Request.Companion::class)
private class {{operationIdCamelCase}}Request(val value: Map<kotlin.String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>) { private class {{operationIdCamelCase}}Request(val value: Map<kotlin.String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Request> { companion object : KSerializer<{{operationIdCamelCase}}Request> {
private val serializer: KSerializer<Map<kotlin.String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>> = serializer<Map<String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>>() private val serializer: KSerializer<Map<kotlin.String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>> = serializer<Map<String, {{#bodyParam}}{{baseType}}{{/bodyParam}}>>()
override val descriptor = serializer.descriptor override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, obj.value) override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder))
} }
} }

View File

@ -1,9 +1,9 @@
@Serializable({{operationIdCamelCase}}Response.Companion::class) @Serializable({{operationIdCamelCase}}Response.Companion::class)
private class {{operationIdCamelCase}}Response(val value: List<{{returnBaseType}}>) { private class {{operationIdCamelCase}}Response(val value: List<{{returnBaseType}}>) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Response> { companion object : KSerializer<{{operationIdCamelCase}}Response> {
private val serializer: KSerializer<List<{{returnBaseType}}>> = serializer<List<{{returnBaseType}}>>() private val serializer: KSerializer<List<{{returnBaseType}}>> = serializer<List<{{returnBaseType}}>>()
override val descriptor = serializer.descriptor override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, obj.value) override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder))
} }
} }

View File

@ -1,9 +1,9 @@
@Serializable({{operationIdCamelCase}}Response.Companion::class) @Serializable({{operationIdCamelCase}}Response.Companion::class)
private class {{operationIdCamelCase}}Response(val value: Map<kotlin.String, {{returnBaseType}}>) { private class {{operationIdCamelCase}}Response(val value: Map<kotlin.String, {{returnBaseType}}>) {
{{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Response> { companion object : KSerializer<{{operationIdCamelCase}}Response> {
private val serializer: KSerializer<Map<kotlin.String, {{returnBaseType}}>> = serializer<Map<String, {{returnBaseType}}>>() private val serializer: KSerializer<Map<kotlin.String, {{returnBaseType}}>> = serializer<Map<String, {{returnBaseType}}>>()
override val descriptor = serializer.descriptor override val descriptor = serializer.descriptor
override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, obj.value) override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, value.value)
override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder))
} }
} }

View File

@ -16,7 +16,7 @@ import {{modelPackage}}.*
* @param {{{name}}} {{{description}}} * @param {{{name}}} {{{description}}}
{{/allVars}} {{/allVars}}
*/ */
data class {{classname}}RoomModel ( {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class {{classname}}RoomModel (
@PrimaryKey(autoGenerate = true) var roomTableId: Int, @PrimaryKey(autoGenerate = true) var roomTableId: Int,
{{#allVars}}{{#items.isPrimitiveType}}var {{{name}}}: {{#isArray}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{^items.isEnum}}{{{items.dataType}}}{{/items.isEnum}}{{#items.isEnum}}{{classname}}.{{{nameInPascalCase}}}{{/items.isEnum}}>{{>model_room_init_var}}{{/isArray}}, {{#allVars}}{{#items.isPrimitiveType}}var {{{name}}}: {{#isArray}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{^items.isEnum}}{{{items.dataType}}}{{/items.isEnum}}{{#items.isEnum}}{{classname}}.{{{nameInPascalCase}}}{{/items.isEnum}}>{{>model_room_init_var}}{{/isArray}},
{{/items.isPrimitiveType}}{{/allVars}} {{/items.isPrimitiveType}}{{/allVars}}

View File

@ -71,9 +71,9 @@ import java.io.IOException
@Deprecated(message = "This schema is deprecated.") @Deprecated(message = "This schema is deprecated.")
{{/isDeprecated}} {{/isDeprecated}}
{{>additionalModelTypeAnnotations}} {{>additionalModelTypeAnnotations}}
{{#nonPublicApi}}internal {{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) { {{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}data class {{classname}}(var actualInstance: Any? = null) {
class CustomTypeAdapterFactory : TypeAdapterFactory { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}class CustomTypeAdapterFactory : TypeAdapterFactory {
override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? { override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {
if (!{{classname}}::class.java.isAssignableFrom(type.rawType)) { if (!{{classname}}::class.java.isAssignableFrom(type.rawType)) {
return null // this class only serializes '{{classname}}' and its subtypes return null // this class only serializes '{{classname}}' and its subtypes
@ -237,7 +237,7 @@ import java.io.IOException
} }
} }
companion object { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}companion object {
/** /**
* Validates the JSON Element and throws an exception if issues found * Validates the JSON Element and throws an exception if issues found
* *
@ -245,7 +245,7 @@ import java.io.IOException
* @throws IOException if the JSON Element is invalid with respect to {{classname}} * @throws IOException if the JSON Element is invalid with respect to {{classname}}
*/ */
@Throws(IOException::class) @Throws(IOException::class)
fun validateJsonElement(jsonElement: JsonElement?) { {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}fun validateJsonElement(jsonElement: JsonElement?) {
requireNotNull(jsonElement) { requireNotNull(jsonElement) {
"Provided json element must not be null" "Provided json element must not be null"
} }

View File

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

View File

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

View File

@ -159,7 +159,7 @@ class ApiClient(
companion object { companion object {
@JvmStatic @JvmStatic
protected val baseUrlKey = "org.openapitools.client.baseUrl" protected val baseUrlKey: String = "org.openapitools.client.baseUrl"
@JvmStatic @JvmStatic
val defaultBasePath: String by lazy { val defaultBasePath: String by lazy {

View File

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

View File

@ -33,21 +33,21 @@ val EMPTY_REQUEST: RequestBody = ByteArray(0).toRequestBody()
open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) { open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) {
companion object { companion object {
protected const val ContentType = "Content-Type" protected const val ContentType: String = "Content-Type"
protected const val Accept = "Accept" protected const val Accept: String = "Accept"
protected const val Authorization = "Authorization" protected const val Authorization: String = "Authorization"
protected const val JsonMediaType = "application/json" protected const val JsonMediaType: String = "application/json"
protected const val FormDataMediaType = "multipart/form-data" protected const val FormDataMediaType: String = "multipart/form-data"
protected const val FormUrlEncMediaType = "application/x-www-form-urlencoded" protected const val FormUrlEncMediaType: String = "application/x-www-form-urlencoded"
protected const val XmlMediaType = "application/xml" protected const val XmlMediaType: String = "application/xml"
protected const val OctetMediaType = "application/octet-stream" protected const val OctetMediaType: String = "application/octet-stream"
val apiKey: MutableMap<String, String> = mutableMapOf() val apiKey: MutableMap<String, String> = mutableMapOf()
val apiKeyPrefix: MutableMap<String, String> = mutableMapOf() val apiKeyPrefix: MutableMap<String, String> = mutableMapOf()
var username: String? = null var username: String? = null
var password: String? = null var password: String? = null
var accessToken: String? = null var accessToken: String? = null
const val baseUrlKey = "org.openapitools.client.baseUrl" const val baseUrlKey: String = "org.openapitools.client.baseUrl"
@JvmStatic @JvmStatic
val defaultClient: OkHttpClient by lazy { val defaultClient: OkHttpClient by lazy {

View File

@ -6,7 +6,7 @@ import java.net.URI
class URIAdapter { class URIAdapter {
@ToJson @ToJson
fun toJson(uri: URI) = uri.toString() fun toJson(uri: URI): String = uri.toString()
@FromJson @FromJson
fun fromJson(s: String): URI = URI.create(s) fun fromJson(s: String): URI = URI.create(s)

View File

@ -6,7 +6,7 @@ import java.util.UUID
class UUIDAdapter { class UUIDAdapter {
@ToJson @ToJson
fun toJson(uuid: UUID) = uuid.toString() fun toJson(uuid: UUID): String = uuid.toString()
@FromJson @FromJson
fun fromJson(s: String): UUID = UUID.fromString(s) fun fromJson(s: String): UUID = UUID.fromString(s)

View File

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

View File

@ -33,21 +33,21 @@ val EMPTY_REQUEST: RequestBody = ByteArray(0).toRequestBody()
open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) { open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) {
companion object { companion object {
protected const val ContentType = "Content-Type" protected const val ContentType: String = "Content-Type"
protected const val Accept = "Accept" protected const val Accept: String = "Accept"
protected const val Authorization = "Authorization" protected const val Authorization: String = "Authorization"
protected const val JsonMediaType = "application/json" protected const val JsonMediaType: String = "application/json"
protected const val FormDataMediaType = "multipart/form-data" protected const val FormDataMediaType: String = "multipart/form-data"
protected const val FormUrlEncMediaType = "application/x-www-form-urlencoded" protected const val FormUrlEncMediaType: String = "application/x-www-form-urlencoded"
protected const val XmlMediaType = "application/xml" protected const val XmlMediaType: String = "application/xml"
protected const val OctetMediaType = "application/octet-stream" protected const val OctetMediaType: String = "application/octet-stream"
val apiKey: MutableMap<String, String> = mutableMapOf() val apiKey: MutableMap<String, String> = mutableMapOf()
val apiKeyPrefix: MutableMap<String, String> = mutableMapOf() val apiKeyPrefix: MutableMap<String, String> = mutableMapOf()
var username: String? = null var username: String? = null
var password: String? = null var password: String? = null
var accessToken: String? = null var accessToken: String? = null
const val baseUrlKey = "org.openapitools.client.baseUrl" const val baseUrlKey: String = "org.openapitools.client.baseUrl"
@JvmStatic @JvmStatic
val defaultClient: OkHttpClient by lazy { val defaultClient: OkHttpClient by lazy {

View File

@ -6,7 +6,7 @@ import java.net.URI
class URIAdapter { class URIAdapter {
@ToJson @ToJson
fun toJson(uri: URI) = uri.toString() fun toJson(uri: URI): String = uri.toString()
@FromJson @FromJson
fun fromJson(s: String): URI = URI.create(s) fun fromJson(s: String): URI = URI.create(s)

View File

@ -6,7 +6,7 @@ import java.util.UUID
class UUIDAdapter { class UUIDAdapter {
@ToJson @ToJson
fun toJson(uuid: UUID) = uuid.toString() fun toJson(uuid: UUID): String = uuid.toString()
@FromJson @FromJson
fun fromJson(s: String): UUID = UUID.fromString(s) fun fromJson(s: String): UUID = UUID.fromString(s)

View File

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

View File

@ -33,21 +33,21 @@ val EMPTY_REQUEST: RequestBody = ByteArray(0).toRequestBody()
open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) { open class ApiClient(val baseUrl: String, val client: Call.Factory = defaultClient) {
companion object { companion object {
protected const val ContentType = "Content-Type" protected const val ContentType: String = "Content-Type"
protected const val Accept = "Accept" protected const val Accept: String = "Accept"
protected const val Authorization = "Authorization" protected const val Authorization: String = "Authorization"
protected const val JsonMediaType = "application/json" protected const val JsonMediaType: String = "application/json"
protected const val FormDataMediaType = "multipart/form-data" protected const val FormDataMediaType: String = "multipart/form-data"
protected const val FormUrlEncMediaType = "application/x-www-form-urlencoded" protected const val FormUrlEncMediaType: String = "application/x-www-form-urlencoded"
protected const val XmlMediaType = "application/xml" protected const val XmlMediaType: String = "application/xml"
protected const val OctetMediaType = "application/octet-stream" protected const val OctetMediaType: String = "application/octet-stream"
val apiKey: MutableMap<String, String> = mutableMapOf() val apiKey: MutableMap<String, String> = mutableMapOf()
val apiKeyPrefix: MutableMap<String, String> = mutableMapOf() val apiKeyPrefix: MutableMap<String, String> = mutableMapOf()
var username: String? = null var username: String? = null
var password: String? = null var password: String? = null
var accessToken: String? = null var accessToken: String? = null
const val baseUrlKey = "org.openapitools.client.baseUrl" const val baseUrlKey: String = "org.openapitools.client.baseUrl"
@JvmStatic @JvmStatic
val defaultClient: OkHttpClient by lazy { val defaultClient: OkHttpClient by lazy {

View File

@ -6,7 +6,7 @@ import java.net.URI
class URIAdapter { class URIAdapter {
@ToJson @ToJson
fun toJson(uri: URI) = uri.toString() fun toJson(uri: URI): String = uri.toString()
@FromJson @FromJson
fun fromJson(s: String): URI = URI.create(s) fun fromJson(s: String): URI = URI.create(s)

Some files were not shown because too many files have changed in this diff Show More