From 4f3593e7bb57c50ec7521baf125d74362e59bec2 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Thu, 6 Aug 2020 21:11:49 +0200 Subject: [PATCH 1/8] Upgraded the version of kotlin and ktor for multiplatform --- .../languages/KotlinClientCodegen.java | 40 ++-- .../resources/kotlin-client/README.mustache | 10 +- .../kotlin-client/class_doc.mustache | 2 +- .../kotlin-client/data_class.mustache | 21 +- .../kotlin-client/data_class_opt_var.mustache | 6 +- .../kotlin-client/data_class_req_var.mustache | 10 +- .../kotlin-client/enum_class.mustache | 25 ++- .../resources/kotlin-client/gradle.properties | 1 + .../kotlin-client/interface_opt_var.mustache | 4 +- .../kotlin-client/interface_req_var.mustache | 4 +- .../multiplatform/build.gradle.kts.mustache | 132 +++++++++++++ .../multiplatform/build.gradle.mustache | 161 --------------- .../multiplatform/gradle-wrapper.jar | Bin 53639 -> 58694 bytes .../gradle-wrapper.properties.mustache | 2 +- .../libraries/multiplatform/gradlew | 183 ++++++++++++++++++ .../libraries/multiplatform/gradlew.bat | 103 ++++++++++ .../settings.gradle.kts.mustache | 1 + .../kotlin-client/licenseInfo.mustache | 20 +- .../kotlin-client/settings.gradle.mustache | 1 - 19 files changed, 497 insertions(+), 229 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/gradle.properties create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache delete mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.mustache create mode 100755 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew.bat create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/settings.gradle.kts.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 1ac723a984e1..72ff8cc8b812 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -284,7 +284,7 @@ public void processOpts() { super.processOpts(); if (MULTIPLATFORM.equals(getLibrary())) { - sourceFolder = "src/commonMain/kotlin"; + sourceFolder = "common/src/main"; } @@ -311,13 +311,13 @@ public void processOpts() { if (hasConflict) { LOGGER.warn("You specified RxJava versions 1 and 2 and 3 or Coroutines together, please choose one of them."); } else if (hasRx) { - this.setUseRxJava(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA).toString())); + this.setUseRxJava(Boolean.parseBoolean(additionalProperties.get(USE_RX_JAVA).toString())); } else if (hasRx2) { - this.setUseRxJava2(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA2).toString())); + this.setUseRxJava2(Boolean.parseBoolean(additionalProperties.get(USE_RX_JAVA2).toString())); } else if (hasRx3) { - this.setUseRxJava3(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA3).toString())); + this.setUseRxJava3(Boolean.parseBoolean(additionalProperties.get(USE_RX_JAVA3).toString())); } else if (hasCoroutines) { - this.setUseCoroutines(Boolean.valueOf(additionalProperties.get(USE_COROUTINES).toString())); + this.setUseCoroutines(Boolean.parseBoolean(additionalProperties.get(USE_COROUTINES).toString())); } if (!hasRx && !hasRx2 && !hasRx3 && !hasCoroutines) { @@ -521,15 +521,15 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { typeMapping.put("object", "kotlin.String"); // kotlin.Any not serializable // multiplatform import mapping - importMapping.put("BigDecimal", "kotlin.Double"); - importMapping.put("UUID", "kotlin.String"); - importMapping.put("URI", "kotlin.String"); + importMapping.put("BigDecimal", "Double"); + importMapping.put("UUID", "String"); + importMapping.put("URI", "String"); importMapping.put("InputProvider", "io.ktor.client.request.forms.InputProvider"); importMapping.put("File", packageName + ".infrastructure.OctetByteArray"); - importMapping.put("Timestamp", "kotlin.String"); + importMapping.put("Timestamp", "String"); importMapping.put("LocalDateTime", "kotlin.String"); - importMapping.put("LocalDate", "kotlin.String"); - importMapping.put("LocalTime", "kotlin.String"); + importMapping.put("LocalDate", "String"); + importMapping.put("LocalTime", "String"); importMapping.put("Base64ByteArray", packageName + ".infrastructure.Base64ByteArray"); importMapping.put("OctetByteArray", packageName + ".infrastructure.OctetByteArray"); @@ -547,14 +547,15 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { supportingFiles.add(new SupportingFile("auth/OAuth.kt.mustache", authFolder, "OAuth.kt")); // multiplatform specific testing files - supportingFiles.add(new SupportingFile("commonTest/Coroutine.kt.mustache", "src/commonTest/kotlin/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("iosTest/Coroutine.kt.mustache", "src/iosTest/kotlin/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("jsTest/Coroutine.kt.mustache", "src/jsTest/kotlin/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("jvmTest/Coroutine.kt.mustache", "src/jvmTest/kotlin/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("commonTest/Coroutine.kt.mustache", "common/src/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("iosTest/Coroutine.kt.mustache", "ios/src/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("jsTest/Coroutine.kt.mustache", "js/src/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("jvmTest/Coroutine.kt.mustache", "jvm/src/test/util", "Coroutine.kt")); // gradle wrapper supporting files supportingFiles.add(new SupportingFile("gradlew.mustache", "", "gradlew")); supportingFiles.add(new SupportingFile("gradlew.bat.mustache", "", "gradlew.bat")); + supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.peoperties")); supportingFiles.add(new SupportingFile("gradle-wrapper.properties.mustache", "gradle.wrapper".replace(".", File.separator), "gradle-wrapper.properties")); supportingFiles.add(new SupportingFile("gradle-wrapper.jar", "gradle.wrapper".replace(".", File.separator), "gradle-wrapper.jar")); } @@ -568,9 +569,14 @@ private void commonJvmMultiplatformSupportingFiles(String infrastructureFolder) } private void commonSupportingFiles() { + if (getLibrary().equals(MULTIPLATFORM)) { + supportingFiles.add(new SupportingFile("build.gradle.kts.mustache", "", "build.gradle.kts")); + supportingFiles.add(new SupportingFile("settings.gradle.kts.mustache", "", "settings.gradle.kts")); + } else { + supportingFiles.add(new SupportingFile("build.gradle.mustache", "", "build.gradle")); + supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); + } supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("build.gradle.mustache", "", "build.gradle")); - supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/README.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/README.mustache index eebddf4b1961..85e183eed494 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/README.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/README.mustache @@ -7,7 +7,7 @@ * Gradle 4.9 {{/jvm}} {{#multiplatform}} -* Kotlin 1.3.50 +* Kotlin 1.3.72 {{/multiplatform}} ## Build @@ -36,7 +36,7 @@ This runs all tests and packages the library. {{#jvm}}* Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets.{{/jvm}} {{#generateApiDocs}} - + ## Documentation for API Endpoints All URIs are relative to *{{{basePath}}}* @@ -48,7 +48,7 @@ Class | Method | HTTP request | Description {{/generateApiDocs}} {{#generateModelDocs}} - + ## Documentation for Models {{#modelPackage}} @@ -60,7 +60,7 @@ No model defined in this package {{/modelPackage}} {{/generateModelDocs}} -{{! TODO: optional documentation for authorization? }} +{{! TODO: optional documentation for authorization? }} ## Documentation for Authorization {{^authMethods}} @@ -72,7 +72,7 @@ Authentication schemes defined for the API: {{/last}} {{/authMethods}} {{#authMethods}} - + ### {{name}} {{#isApiKey}}- **Type**: API key diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/class_doc.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/class_doc.mustache index a3405b25c845..b6b482afb78b 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/class_doc.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/class_doc.mustache @@ -7,7 +7,7 @@ Name | Type | Description | Notes {{/vars}} {{#vars}}{{#isEnum}} -{{!NOTE: see java's resources "pojo_doc.mustache" once enums are fully implemented}} +{{!NOTE: see java's resources "pojo_doc.mustache" once enums are fully implemented}} ## Enum: {{baseName}} Name | Value ---- | -----{{#allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index 1b63b0878117..9374c72417b6 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -23,14 +23,15 @@ import kotlinx.android.parcel.Parcelize {{/multiplatform}} {{#multiplatform}} import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer {{/multiplatform}} {{#serializableModel}} import java.io.Serializable {{/serializableModel}} +import kotlin.collections.* /** * {{{description}}} + * {{#allVars}} * @param {{{name}}} {{{description}}} {{/allVars}} @@ -60,14 +61,13 @@ import java.io.Serializable {{#vars}} {{#isEnum}} /** - * {{{description}}} - * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} - */ - {{#multiplatform}}@Serializable(with = {{nameInCamelCase}}.Serializer::class){{/multiplatform}} - {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInCamelCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}){ + * {{{description}}} + * + * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} + */ + {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInCamelCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}String{{/isContainer}}){ {{#allowableValues}} {{#enumVars}} - {{^multiplatform}} {{#moshi}} @Json(name = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{/moshi}} @@ -77,16 +77,11 @@ import java.io.Serializable {{#jackson}} @JsonProperty(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{/jackson}} - {{/multiplatform}} {{#multiplatform}} - {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} + @SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{/multiplatform}} {{/enumVars}} {{/allowableValues}} - {{#multiplatform}} - - {{#nonPublicApi}}internal {{/nonPublicApi}}object Serializer : CommonEnumSerializer<{{nameInCamelCase}}>("{{nameInCamelCase}}", values(), values().map { it.value.toString() }.toTypedArray()) - {{/multiplatform}} } {{/isEnum}} {{/vars}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache index cbf85029fcab..8fd2f6063e55 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache @@ -1,5 +1,7 @@ {{#description}} - /* {{{description}}} */ + /** + * {{{description}}} + */ {{/description}} {{^multiplatform}} {{#moshi}} @@ -15,4 +17,4 @@ {{#deprecated}} @Deprecated(message = "This property is deprecated.") {{/deprecated}} - {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}}{{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file + {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}}{{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}List{{/isList}}{{^isList}}Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_req_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_req_var.mustache index eb18e85c4ce7..fd9740086a77 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_req_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_req_var.mustache @@ -1,5 +1,7 @@ {{#description}} - /* {{{description}}} */ + /** + * {{{description}}} + */ {{/description}} {{^multiplatform}} {{#moshi}} @@ -15,4 +17,8 @@ {{#deprecated}} @Deprecated(message = "This property is deprecated.") {{/deprecated}} - {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") @Required {{/multiplatform}}{{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}} \ No newline at end of file + {{#multiplatform}} + @SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") + @Required + {{/multiplatform}} + {{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}List{{/isList}}{{^isList}}Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache index 8de73d460492..2bce60dbe8c6 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache @@ -11,18 +11,17 @@ import com.fasterxml.jackson.annotation.JsonProperty {{/multiplatform}} {{#multiplatform}} import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer {{/multiplatform}} /** -* {{{description}}} -* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} -*/ -{{#multiplatform}}@Serializable(with = {{classname}}.Serializer::class){{/multiplatform}} -{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}){ + * {{{description}}} + * + * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} + */ +{{#multiplatform}}@Serializable{{/multiplatform}} +{{#nonPublicApi}}internal {{/nonPublicApi}}enum class{{classname}}(val value: {{{dataType}}}) { {{#allowableValues}}{{#enumVars}} - {{^multiplatform}} {{#moshi}} @Json(name = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/moshi}} @@ -32,6 +31,8 @@ import kotlinx.serialization.internal.CommonEnumSerializer {{#jackson}} @JsonProperty(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/jackson}} + {{#multiplatform}} + @SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/multiplatform}} {{#isListContainer}} {{#isList}} @@ -48,14 +49,10 @@ import kotlinx.serialization.internal.CommonEnumSerializer {{/enumVars}}{{/allowableValues}} /** - This override toString avoids using the enum var name and uses the actual api value instead. - In cases the var name and value are different, the client would send incorrect enums to the server. - **/ + * This override toString avoids using the enum var name and uses the actual api value instead. + * In cases the var name and value are different, the client would send incorrect enums to the server. + */ override fun toString(): String { return value{{^isString}}.toString(){{/isString}} } - -{{#multiplatform}} - {{#nonPublicApi}}internal {{/nonPublicApi}}object Serializer : CommonEnumSerializer<{{classname}}>("{{classname}}", values(), values().map { it.value.toString() }.toTypedArray()) -{{/multiplatform}} } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/gradle.properties b/modules/openapi-generator/src/main/resources/kotlin-client/gradle.properties new file mode 100644 index 000000000000..29e08e8ca88f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache index 3284d7b1db41..3c12573fbff6 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache @@ -1,5 +1,7 @@ {{#description}} - /* {{{description}}} */ + /** + * {{{description}}} + */ {{/description}} {{^multiplatform}} {{#moshi}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/interface_req_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/interface_req_var.mustache index ee62fbb2d126..cef7ea0a283f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/interface_req_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/interface_req_var.mustache @@ -1,5 +1,7 @@ {{#description}} - /* {{{description}}} */ + /** + * {{{description}}} + */ {{/description}} {{^multiplatform}} {{#moshi}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache new file mode 100644 index 000000000000..59392ff8aae6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache @@ -0,0 +1,132 @@ +plugins { + kotlin("multiplatform") version "1.3.72" + kotlin("plugin.serialization") version "1.3.72" +} + +group = "{{groupId}}" +version = "{{artifactVersion}}" + +val kotlin_version = "1.3.72" +val kotlinx_io_version = "0.1.16" +val ktor_version = "1.3.2" + +repositories { + jcenter() +} + +kotlin { + /* + * To find out how to configure the targets, please follow the link: + * https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#setting-up-targets + */ + jvm { + val main by compilations.getting { + kotlinOptions { + // Setup the Kotlin compiler options for the 'main' compilation: + jvmTarget = "1.8" + } + } + } + ios { + binaries { + framework { + freeCompilerArgs.add("-Xobjc-generics") + } + } + } + js() + + sourceSets { + val commonMain by getting { + kotlin.srcDir("common/src/main") + + dependencies { + implementation(kotlin("stdlib-common")) + api("io.ktor:ktor-client-core:$ktor_version") + api("io.ktor:ktor-client-json:$ktor_version") + api("io.ktor:ktor-client-serialization:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinx_io_version") + } + } + + val commonTest by getting { + kotlin.srcDir("common/src/test") + + dependencies { + implementation(kotlin("test-common")) + implementation(kotlin("test-annotations-common")) + implementation("io.ktor:ktor-client-mock:$ktor_version") + } + } + + val jvmMain by getting { + kotlin.srcDir("jvm/src/main") + + dependencies { + implementation(kotlin("stdlib-jdk8")) + api("io.ktor:ktor-client-core-jvm:$ktor_version") + api("io.ktor:ktor-client-json-jvm:$ktor_version") + api("io.ktor:ktor-client-serialization-jvm:$ktor_version") + } + } + + val jvmTest by getting { + kotlin.srcDir("jvm/src/test") + + dependencies { + implementation(kotlin("test")) + implementation(kotlin("test-junit5")) + implementation("org.junit.jupiter:junit-jupiter:5.6.2") + implementation("io.ktor:ktor-client-mock-jvm:$ktor_version") + } + } + + val iosMain by getting { + kotlin.srcDir("ios/src/main") + + dependencies { + api("io.ktor:ktor-client-ios:$ktor_version") + api("io.ktor:ktor-client-json-native:$ktor_version") + api("io.ktor:ktor-client-serialization-native:$ktor_version") + } + } + + val iosTest by getting { + kotlin.srcDir("ios/src/test") + + dependencies { + implementation("io.ktor:ktor-client-mock-native:$ktor_version") + } + } + + val jsMain by getting { + kotlin.srcDir("js/src/main") + + dependencies { + implementation(kotlin("stdlib-js")) + api("io.ktor:ktor-client-js:$ktor_version") + api("io.ktor:ktor-client-json-js:$ktor_version") + api("io.ktor:ktor-client-serialization-js:$ktor_version") + } + } + + val jsTest by getting { + kotlin.srcDir("js/src/test") + + dependencies { + implementation("io.ktor:ktor-client-mock-js:$ktor_version") + } + } + } +} + +task iosTest { + def device = project.findProperty("device")?.toString() ?: "iPhone 8" + dependsOn("linkDebugTestIosX64") + group = JavaBasePlugin.VERIFICATION_GROUP + description = "Execute unit tests on $device simulator" + doLast { + val binary = kotlin.targets.iosX64.binaries.getTest("DEBUG") + exec { commandLine "xcrun", "simctl", "spawn", device, binary.outputFile } + } +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.mustache deleted file mode 100644 index dfc6736dc6d5..000000000000 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.mustache +++ /dev/null @@ -1,161 +0,0 @@ -apply plugin: 'kotlin-multiplatform' -apply plugin: 'kotlinx-serialization' - -group '{{groupId}}' -version '{{artifactVersion}}' - -ext { - kotlin_version = '1.3.50' - kotlinx_version = '1.1.0' - coroutines_version = '1.3.1' - serialization_version = '0.12.0' - ktor_version = '1.2.4' -} - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50" // $kotlin_version - classpath "org.jetbrains.kotlin:kotlin-serialization:1.3.50" // $kotlin_version - } -} - -repositories { - jcenter() -} - -kotlin { - jvm() - iosArm64() { binaries { framework { freeCompilerArgs.add("-Xobjc-generics") } } } - iosX64() { binaries { framework { freeCompilerArgs.add("-Xobjc-generics") } } } - js() - - sourceSets { - commonMain { - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version" - api "io.ktor:ktor-client-core:$ktor_version" - api "io.ktor:ktor-client-json:$ktor_version" - api "io.ktor:ktor-client-serialization:$ktor_version" - } - } - - commonTest { - dependencies { - implementation "org.jetbrains.kotlin:kotlin-test-common" - implementation "org.jetbrains.kotlin:kotlin-test-annotations-common" - implementation "io.ktor:ktor-client-mock:$ktor_version" - } - } - - jvmMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version" - api "io.ktor:ktor-client-core-jvm:$ktor_version" - api "io.ktor:ktor-client-json-jvm:$ktor_version" - api "io.ktor:ktor-client-serialization-jvm:$ktor_version" - } - } - - jvmTest { - dependsOn commonTest - dependencies { - implementation "org.jetbrains.kotlin:kotlin-test" - implementation "org.jetbrains.kotlin:kotlin-test-junit" - implementation "io.ktor:ktor-client-mock-jvm:$ktor_version" - } - } - - iosMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version" - api "io.ktor:ktor-client-ios:$ktor_version" - } - } - - iosTest { - dependsOn commonTest - dependencies { - implementation "io.ktor:ktor-client-mock-native:$ktor_version" - } - } - - iosArm64().compilations.main.defaultSourceSet { - dependsOn iosMain - dependencies { - api "io.ktor:ktor-client-ios-iosarm64:$ktor_version" - api "io.ktor:ktor-client-json-iosarm64:$ktor_version" - api "io.ktor:ktor-client-serialization-iosarm64:$ktor_version" - } - } - - iosArm64().compilations.test.defaultSourceSet { - dependsOn iosTest - } - - iosX64().compilations.main.defaultSourceSet { - dependsOn iosMain - dependencies { - api "io.ktor:ktor-client-ios-iosx64:$ktor_version" - api "io.ktor:ktor-client-json-iosx64:$ktor_version" - api "io.ktor:ktor-client-serialization-iosx64:$ktor_version" - } - } - - jsMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version" - api "io.ktor:ktor-client-js:$ktor_version" - api "io.ktor:ktor-client-json-js:$ktor_version" - api "io.ktor:ktor-client-serialization-js:$ktor_version" - } - } - - jsTest { - dependsOn commonTest - dependencies { - implementation "io.ktor:ktor-client-mock-js:$ktor_version" - implementation "io.ktor:ktor-client-js:$ktor_version" - implementation "io.ktor:ktor-client-json:$ktor_version" - implementation "io.ktor:ktor-client-serialization-js:$ktor_version" - } - } - - iosX64().compilations.test.defaultSourceSet { - dependsOn iosTest - } - - all { - languageSettings { - useExperimentalAnnotation('kotlin.Experimental') - } - } - } -} - -task iosTest { - def device = project.findProperty("device")?.toString() ?: "iPhone 8" - dependsOn 'linkDebugTestIosX64' - group = JavaBasePlugin.VERIFICATION_GROUP - description = "Execute unit tests on ${device} simulator" - doLast { - def binary = kotlin.targets.iosX64.binaries.getTest('DEBUG') - exec { commandLine 'xcrun', 'simctl', 'spawn', device, binary.outputFile } - } -} - -configurations { // workaround for https://youtrack.jetbrains.com/issue/KT-27170 - compileClasspath -} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.jar b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.jar index 2c6137b87896c8f70315ae454e00a969ef5f6019..490fda8577df6c95960ba7077c43220e5bb2c0d9 100644 GIT binary patch literal 58694 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 delta 48559 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 RyN?YF4IK>3u>04i{|7N0*}VV& diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.properties.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.properties.mustache index ce3ca77db54b..8f38dbc2bfd8 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.properties.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradle-wrapper.properties.mustache @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew new file mode 100755 index 000000000000..2fe81a7d95e4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew.bat b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew.bat new file mode 100644 index 000000000000..62bd9b9ccefe --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/gradlew.bat @@ -0,0 +1,103 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/settings.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/settings.gradle.kts.mustache new file mode 100644 index 000000000000..ba0114cb1764 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/settings.gradle.kts.mustache @@ -0,0 +1 @@ +rootProject.name = "{{artifactId}}" diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/licenseInfo.mustache index 3a547de74bb7..835764cfc729 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/licenseInfo.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/licenseInfo.mustache @@ -1,11 +1,11 @@ /** -* {{{appName}}} -* {{{appDescription}}} -* -* {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} -* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ \ No newline at end of file + * {{{appName}}} + * {{{appDescription}}} + * + * {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} + * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache index 2a789fe8d043..448dc07602e2 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache @@ -1,2 +1 @@ -{{#multiplatform}}enableFeaturePreview('GRADLE_METADATA'){{/multiplatform}} rootProject.name = '{{artifactId}}' \ No newline at end of file From 5e4eff6227ac451291368c8ed02f65c660998075 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Fri, 7 Aug 2020 01:22:50 +0200 Subject: [PATCH 2/8] Fixed a lot of issues --- .gitignore | 7 +- .../languages/KotlinClientCodegen.java | 26 +-- .../kotlin-client/data_class.mustache | 2 +- .../kotlin-client/data_class_opt_var.mustache | 3 +- .../kotlin-client/enum_class.mustache | 4 +- .../libraries/multiplatform/api.mustache | 68 +++---- .../multiplatform/auth/ApiKeyAuth.kt.mustache | 2 +- .../auth/Authentication.kt.mustache | 4 +- .../auth/HttpBasicAuth.kt.mustache | 2 +- .../auth/HttpBearerAuth.kt.mustache | 2 +- .../multiplatform/auth/OAuth.kt.mustache | 2 +- .../multiplatform/build.gradle.kts.mustache | 31 +-- .../infrastructure/ApiClient.kt.mustache | 82 +++----- .../Base64ByteArray.kt.mustache | 5 +- .../infrastructure/Bytes.kt.mustache | 4 +- .../infrastructure/HttpResponse.kt.mustache | 28 +-- .../infrastructure/OctetByteArray.kt.mustache | 5 +- .../infrastructure/RequestConfig.kt.mustache | 16 ++ .../jvmTest/Coroutine.kt.mustache | 3 +- .../serial_wrapper_request_list.mustache | 11 +- .../serial_wrapper_request_map.mustache | 4 +- .../serial_wrapper_response_list.mustache | 11 +- .../serial_wrapper_response_map.mustache | 4 +- .../kotlin-client/settings.gradle.mustache | 2 +- samples/client/petstore/kotlin-gson/README.md | 10 +- .../client/petstore/kotlin-gson/docs/Order.md | 2 +- .../client/petstore/kotlin-gson/docs/Pet.md | 2 +- .../petstore/kotlin-gson/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../client/petstore/kotlin-jackson/README.md | 10 +- .../petstore/kotlin-jackson/docs/Order.md | 2 +- .../petstore/kotlin-jackson/docs/Pet.md | 2 +- .../petstore/kotlin-jackson/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../kotlin-json-request-string/README.md | 10 +- .../kotlin-json-request-string/docs/Order.md | 2 +- .../kotlin-json-request-string/docs/Pet.md | 2 +- .../settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../kotlin-jvm-okhttp4-coroutines/README.md | 10 +- .../docs/Order.md | 2 +- .../kotlin-jvm-okhttp4-coroutines/docs/Pet.md | 2 +- .../settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../petstore/kotlin-moshi-codegen/README.md | 10 +- .../kotlin-moshi-codegen/docs/Order.md | 2 +- .../petstore/kotlin-moshi-codegen/docs/Pet.md | 2 +- .../kotlin-moshi-codegen/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../.openapi-generator-ignore | 26 ++- .../.openapi-generator/FILES | 61 +++--- .../petstore/kotlin-multiplatform/README.md | 12 +- .../kotlin-multiplatform/build.gradle | 161 --------------- .../kotlin-multiplatform/build.gradle.kts | 119 +++++++++++ .../kotlin-multiplatform/docs/Order.md | 2 +- .../petstore/kotlin-multiplatform/docs/Pet.md | 2 +- .../kotlin-multiplatform/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.jar | Bin 58702 -> 99747 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../petstore/kotlin-multiplatform/gradlew | 109 ++++------ .../petstore/kotlin-multiplatform/gradlew.bat | 190 +++++++++--------- .../petstore/kotlin-multiplatform/pom.xml | 47 ----- .../kotlin-multiplatform/settings.gradle | 2 - .../kotlin-multiplatform/settings.gradle.kts | 1 + .../org/openapitools/client/apis/PetApi.kt | 188 +++++++++-------- .../org/openapitools/client/apis/StoreApi.kt | 97 +++++---- .../org/openapitools/client/apis/UserApi.kt | 178 ++++++++-------- .../openapitools/client/auth/ApiKeyAuth.kt | 2 +- .../client/auth/Authentication.kt | 4 +- .../openapitools/client/auth/HttpBasicAuth.kt | 2 +- .../client/auth/HttpBearerAuth.kt | 2 +- .../org/openapitools/client/auth/OAuth.kt | 2 +- .../client/infrastructure/ApiAbstractions.kt | 0 .../client/infrastructure/ApiClient.kt | 87 +++----- .../client/infrastructure/Base64ByteArray.kt | 5 +- .../client/infrastructure/Bytes.kt | 4 +- .../client/infrastructure/HttpResponse.kt | 28 +-- .../client/infrastructure/OctetByteArray.kt | 5 +- .../client/infrastructure/RequestConfig.kt | 6 +- .../client/infrastructure/RequestMethod.kt | 0 .../openapitools/client/models/ApiResponse.kt | 34 ++++ .../openapitools/client/models/Category.kt | 31 +++ .../org/openapitools/client/models/Order.kt | 61 ++++++ .../org/openapitools/client/models/Pet.kt | 65 ++++++ .../org/openapitools/client/models/Tag.kt | 31 +++ .../org/openapitools/client/models/User.kt | 52 +++++ .../src/common/test/util/Coroutine.kt | 23 +++ .../openapitools/client/models/ApiResponse.kt | 30 --- .../openapitools/client/models/Category.kt | 28 --- .../org/openapitools/client/models/Order.kt | 51 ----- .../org/openapitools/client/models/Pet.kt | 53 ----- .../org/openapitools/client/models/Tag.kt | 28 --- .../org/openapitools/client/models/User.kt | 41 ---- .../src/commonTest/kotlin/util/Coroutine.kt | 23 --- .../src/ios/test/util/Coroutine.kt | 18 ++ .../src/iosTest/kotlin/util/Coroutine.kt | 18 -- .../kotlin => js/test}/util/Coroutine.kt | 0 .../src/jvm/test/util/Coroutine.kt | 19 ++ .../src/jvmTest/kotlin/util/Coroutine.kt | 18 -- .../petstore/kotlin-nonpublic/README.md | 10 +- .../petstore/kotlin-nonpublic/docs/Order.md | 2 +- .../petstore/kotlin-nonpublic/docs/Pet.md | 2 +- .../petstore/kotlin-nonpublic/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../client/petstore/kotlin-nullable/README.md | 10 +- .../petstore/kotlin-nullable/docs/Order.md | 2 +- .../petstore/kotlin-nullable/docs/Pet.md | 2 +- .../petstore/kotlin-nullable/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../client/petstore/kotlin-okhttp3/README.md | 10 +- .../petstore/kotlin-okhttp3/docs/Order.md | 2 +- .../petstore/kotlin-okhttp3/docs/Pet.md | 2 +- .../petstore/kotlin-okhttp3/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../petstore/kotlin-retrofit2-rx3/README.md | 10 +- .../kotlin-retrofit2-rx3/docs/Order.md | 2 +- .../petstore/kotlin-retrofit2-rx3/docs/Pet.md | 2 +- .../kotlin-retrofit2-rx3/settings.gradle | 3 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../petstore/kotlin-retrofit2/README.md | 10 +- .../petstore/kotlin-retrofit2/docs/Order.md | 2 +- .../petstore/kotlin-retrofit2/docs/Pet.md | 2 +- .../petstore/kotlin-retrofit2/settings.gradle | 3 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../client/petstore/kotlin-string/README.md | 10 +- .../petstore/kotlin-string/docs/Order.md | 2 +- .../client/petstore/kotlin-string/docs/Pet.md | 2 +- .../petstore/kotlin-string/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- .../petstore/kotlin-threetenbp/README.md | 10 +- .../petstore/kotlin-threetenbp/docs/Order.md | 2 +- .../petstore/kotlin-threetenbp/docs/Pet.md | 2 +- .../kotlin-threetenbp/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- samples/client/petstore/kotlin/README.md | 10 +- samples/client/petstore/kotlin/docs/Order.md | 2 +- samples/client/petstore/kotlin/docs/Pet.md | 2 +- .../client/petstore/kotlin/settings.gradle | 3 +- .../org/openapitools/client/apis/PetApi.kt | 20 +- .../org/openapitools/client/apis/StoreApi.kt | 20 +- .../org/openapitools/client/apis/UserApi.kt | 20 +- .../openapitools/client/models/ApiResponse.kt | 27 ++- .../openapitools/client/models/Category.kt | 26 ++- .../org/openapitools/client/models/Order.kt | 42 ++-- .../org/openapitools/client/models/Pet.kt | 40 ++-- .../org/openapitools/client/models/Tag.kt | 26 ++- .../org/openapitools/client/models/User.kt | 36 ++-- 237 files changed, 3092 insertions(+), 2648 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache delete mode 100644 samples/client/petstore/kotlin-multiplatform/build.gradle create mode 100644 samples/client/petstore/kotlin-multiplatform/build.gradle.kts create mode 100644 samples/client/petstore/kotlin-multiplatform/gradle.properties mode change 100755 => 100644 samples/client/petstore/kotlin-multiplatform/gradlew delete mode 100644 samples/client/petstore/kotlin-multiplatform/pom.xml delete mode 100644 samples/client/petstore/kotlin-multiplatform/settings.gradle create mode 100644 samples/client/petstore/kotlin-multiplatform/settings.gradle.kts rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/apis/PetApi.kt (65%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/apis/StoreApi.kt (70%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/apis/UserApi.kt (64%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/auth/ApiKeyAuth.kt (82%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/auth/Authentication.kt (71%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/auth/HttpBasicAuth.kt (80%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/auth/HttpBearerAuth.kt (81%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/auth/OAuth.kt (67%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/ApiAbstractions.kt (100%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/ApiClient.kt (60%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/Base64ByteArray.kt (75%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/Bytes.kt (96%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/HttpResponse.kt (54%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/OctetByteArray.kt (75%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/RequestConfig.kt (77%) rename samples/client/petstore/kotlin-multiplatform/src/{commonMain/kotlin => common/main}/org/openapitools/client/infrastructure/RequestMethod.kt (100%) create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/test/util/Coroutine.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/ApiResponse.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Category.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Order.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Pet.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Tag.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/User.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/commonTest/kotlin/util/Coroutine.kt create mode 100644 samples/client/petstore/kotlin-multiplatform/src/ios/test/util/Coroutine.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/iosTest/kotlin/util/Coroutine.kt rename samples/client/petstore/kotlin-multiplatform/src/{jsTest/kotlin => js/test}/util/Coroutine.kt (100%) create mode 100644 samples/client/petstore/kotlin-multiplatform/src/jvm/test/util/Coroutine.kt delete mode 100644 samples/client/petstore/kotlin-multiplatform/src/jvmTest/kotlin/util/Coroutine.kt diff --git a/.gitignore b/.gitignore index 14b5a330802b..818f28173f77 100644 --- a/.gitignore +++ b/.gitignore @@ -188,14 +188,11 @@ samples/server/petstore/aspnetcore/.vs/ effective.pom # kotlin -samples/client/petstore/kotlin/src/main/kotlin/test/ -samples/client/petstore/kotlin-threetenbp/build -samples/client/petstore/kotlin-string/build +samples/client/petstore/kotlin*/build +samples/client/petstore/kotlin*/.gradle samples/openapi3/client/petstore/kotlin/build samples/server/petstore/kotlin-server/ktor/build samples/server/petstore/kotlin-springboot/build -samples/client/petstore/kotlin-multiplatform/build/ -samples/client/petstore/kotlin-okhttp3/build/ \? # haskell diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 72ff8cc8b812..e19250bcfaed 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -150,6 +150,8 @@ public KotlinClientCodegen() { // cliOptions default redefinition need to be updated updateOption(CodegenConstants.ARTIFACT_ID, this.artifactId); updateOption(CodegenConstants.PACKAGE_NAME, this.packageName); + // Kotlin convention + updateOption(CodegenConstants.ENUM_PROPERTY_NAMING, "PascalCase"); outputFolder = "generated-code" + File.separator + "kotlin-client"; modelTemplateFiles.put("model.mustache", ".kt"); @@ -284,7 +286,7 @@ public void processOpts() { super.processOpts(); if (MULTIPLATFORM.equals(getLibrary())) { - sourceFolder = "common/src/main"; + sourceFolder = "src/common/main"; } @@ -522,14 +524,14 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { // multiplatform import mapping importMapping.put("BigDecimal", "Double"); - importMapping.put("UUID", "String"); - importMapping.put("URI", "String"); + importMapping.put("UUID", "kotlin.String"); + importMapping.put("URI", "kotlin.String"); importMapping.put("InputProvider", "io.ktor.client.request.forms.InputProvider"); importMapping.put("File", packageName + ".infrastructure.OctetByteArray"); - importMapping.put("Timestamp", "String"); + importMapping.put("Timestamp", "kotlin.String"); importMapping.put("LocalDateTime", "kotlin.String"); - importMapping.put("LocalDate", "String"); - importMapping.put("LocalTime", "String"); + importMapping.put("LocalDate", "kotlin.String"); + importMapping.put("LocalTime", "kotlin.String"); importMapping.put("Base64ByteArray", packageName + ".infrastructure.Base64ByteArray"); importMapping.put("OctetByteArray", packageName + ".infrastructure.OctetByteArray"); @@ -547,15 +549,15 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { supportingFiles.add(new SupportingFile("auth/OAuth.kt.mustache", authFolder, "OAuth.kt")); // multiplatform specific testing files - supportingFiles.add(new SupportingFile("commonTest/Coroutine.kt.mustache", "common/src/test/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("iosTest/Coroutine.kt.mustache", "ios/src/test/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("jsTest/Coroutine.kt.mustache", "js/src/test/util", "Coroutine.kt")); - supportingFiles.add(new SupportingFile("jvmTest/Coroutine.kt.mustache", "jvm/src/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("commonTest/Coroutine.kt.mustache", "src/common/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("iosTest/Coroutine.kt.mustache", "src/ios/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("jsTest/Coroutine.kt.mustache", "src/js/test/util", "Coroutine.kt")); + supportingFiles.add(new SupportingFile("jvmTest/Coroutine.kt.mustache", "src/jvm/test/util", "Coroutine.kt")); // gradle wrapper supporting files supportingFiles.add(new SupportingFile("gradlew.mustache", "", "gradlew")); supportingFiles.add(new SupportingFile("gradlew.bat.mustache", "", "gradlew.bat")); - supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.peoperties")); + supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.properties")); supportingFiles.add(new SupportingFile("gradle-wrapper.properties.mustache", "gradle.wrapper".replace(".", File.separator), "gradle-wrapper.properties")); supportingFiles.add(new SupportingFile("gradle-wrapper.jar", "gradle.wrapper".replace(".", File.separator), "gradle-wrapper.jar")); } @@ -569,7 +571,7 @@ private void commonJvmMultiplatformSupportingFiles(String infrastructureFolder) } private void commonSupportingFiles() { - if (getLibrary().equals(MULTIPLATFORM)) { + if (MULTIPLATFORM.equals(getLibrary())) { supportingFiles.add(new SupportingFile("build.gradle.kts.mustache", "", "build.gradle.kts")); supportingFiles.add(new SupportingFile("settings.gradle.kts.mustache", "", "settings.gradle.kts")); } else { diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index 9374c72417b6..ba3132e00d60 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -43,7 +43,7 @@ import kotlin.collections.* {{#isDeprecated}} @Deprecated(message = "This schema is deprecated.") {{/isDeprecated}} -{{#nonPublicApi}}internal {{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}data class{{/discriminator}} {{classname}}{{^discriminator}} ( +{{#nonPublicApi}}internal {{/nonPublicApi}}{{#discriminator}}interface{{/discriminator}}{{^discriminator}}data class{{/discriminator}} {{classname}}{{^discriminator}}( {{#allVars}} {{#required}}{{>data_class_req_var}}{{/required}}{{^required}}{{>data_class_opt_var}}{{/required}}{{^-last}},{{/-last}} {{/allVars}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache index 8fd2f6063e55..c2cca54ff4de 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache @@ -17,4 +17,5 @@ {{#deprecated}} @Deprecated(message = "This property is deprecated.") {{/deprecated}} - {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}}{{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}List{{/isList}}{{^isList}}Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file + {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}} + {{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}List{{/isList}}{{^isList}}Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache index 2bce60dbe8c6..8b9d30eb4593 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache @@ -19,9 +19,10 @@ import kotlinx.serialization.* * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ {{#multiplatform}}@Serializable{{/multiplatform}} -{{#nonPublicApi}}internal {{/nonPublicApi}}enum class{{classname}}(val value: {{{dataType}}}) { +{{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) { {{#allowableValues}}{{#enumVars}} + {{^multiplatform}} {{#moshi}} @Json(name = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/moshi}} @@ -31,6 +32,7 @@ import kotlinx.serialization.* {{#jackson}} @JsonProperty(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/jackson}} + {{/multiplatform}} {{#multiplatform}} @SerialName(value = {{^isString}}"{{/isString}}{{{value}}}{{^isString}}"{{/isString}}) {{/multiplatform}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache index d268f23a77d3..9856348d3709 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache @@ -6,27 +6,27 @@ package {{apiPackage}} import {{packageName}}.infrastructure.* import io.ktor.client.request.forms.formData -import kotlinx.serialization.UnstableDefault import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.serializer.KotlinxSerializer +import io.ktor.client.request.forms.FormPart import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor +import kotlinx.serialization.builtins.list +import kotlinx.serialization.builtins.serializer {{#operations}} -{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}} @UseExperimental(UnstableDefault::class) constructor( +{{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}} constructor( baseUrl: kotlin.String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer ) : ApiClient(baseUrl, httpClientEngine, serializer) { - @UseExperimental(UnstableDefault::class) constructor( - baseUrl: kotlin.String = "{{{basePath}}}", + baseUrl: String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Default + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) {{#operation}} @@ -39,17 +39,21 @@ import kotlinx.serialization.internal.StringDescriptor {{#returnType}} @Suppress("UNCHECKED_CAST") {{/returnType}} - suspend fun {{operationId}}({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): HttpResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { - + suspend fun {{operationId}}( + {{#allParams}} + {{{paramName}}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#hasMore}},{{/hasMore}} + {{/allParams}} + ): HttpResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { + {{! TODO: Optimize all the ?.let to only the places where it's needed }} val localVariableAuthNames = listOf({{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}) - val localVariableBody = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{operationIdCamelCase}}Request({{{paramName}}}{{^isList}}.asList(){{/isList}}){{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{operationIdCamelCase}}Request({{{paramName}}}){{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} + val localVariableBody = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{{paramName}}}?.let { {{operationIdCamelCase}}Request(it{{^isList}}.asList(){{/isList}}) }{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{{paramName}}}?.let { {{operationIdCamelCase}}Request(it) }{{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} {{^hasBodyParam}} {{#hasFormParams}} {{#isMultipart}} formData { {{#formParams}} - {{{paramName}}}?.apply { append("{{{baseName}}}", {{{paramName}}}) } + {{{paramName}}}?.let { append(FormPart("{{{baseName}}}", it)) } {{/formParams}} } {{/isMultipart}} @@ -66,19 +70,22 @@ import kotlinx.serialization.internal.StringDescriptor {{/hasFormParams}} {{/hasBodyParam}} - val localVariableQuery = mutableMapOf>() - {{#queryParams}} - {{{paramName}}}?.apply { localVariableQuery["{{baseName}}"] = {{#isContainer}}toMultiValue(this, "{{collectionFormat}}"){{/isContainer}}{{^isContainer}}listOf("${{{paramName}}}"){{/isContainer}} } - {{/queryParams}} + {{! TODO: Don't use all the listOf() }} + val localVariableQuery = mutableMapOf?>( + {{#queryParams}} + "{{baseName}}" to {{#isContainer}}{{{paramName}}}?.let { toMultiValue(it, "{{collectionFormat}}") }{{/isContainer}}{{^isContainer}}listOf("${{{paramName}}}"){{/isContainer}}{{#hasMore}},{{/hasMore}} + {{/queryParams}} + ) - val localVariableHeaders = mutableMapOf() - {{#headerParams}} - {{{paramName}}}?.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} } - {{/headerParams}} + val localVariableHeaders = mutableMapOf( + {{#headerParams}} + "{{baseName}}" to {{#isContainer}}{{{paramName}}}?.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this?.toString(){{/isContainer}}{{#hasMore}},{{/hasMore}} + {{/headerParams}} + ) val localVariableConfig = RequestConfig( RequestMethod.{{httpMethod}}, - "{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{{paramName}}}"){{/pathParams}}, + "{{path}}"{{#pathParams}}.replace("{{curly true}}{{baseName}}{{curly}}", "${{{paramName}}}"){{/pathParams}}, query = localVariableQuery, headers = localVariableHeaders ) @@ -89,8 +96,8 @@ import kotlinx.serialization.internal.StringDescriptor localVariableAuthNames ).{{#isListContainer}}wrap<{{operationIdCamelCase}}Response>().map { value{{^isList}}.toTypedArray(){{/isList}} }{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}wrap<{{operationIdCamelCase}}Response>().map { value }{{/isMapContainer}}{{^isMapContainer}}wrap(){{/isMapContainer}}{{/isListContainer}} } - {{#hasBodyParam}} + {{#bodyParam}} {{#isListContainer}}{{>serial_wrapper_request_list}}{{/isListContainer}}{{#isMapContainer}}{{>serial_wrapper_request_map}}{{/isMapContainer}} {{/bodyParam}} @@ -101,25 +108,6 @@ import kotlinx.serialization.internal.StringDescriptor {{#isMapContainer}} {{>serial_wrapper_response_map}} {{/isMapContainer}} - - {{/operation}} - - {{#nonPublicApi}}internal {{/nonPublicApi}}companion object { - internal fun setMappers(serializer: KotlinxSerializer) { - {{#operation}} - {{#hasBodyParam}} - {{#bodyParam}} - {{#isListContainer}}serializer.setMapper({{operationIdCamelCase}}Request::class, {{operationIdCamelCase}}Request.serializer()){{/isListContainer}}{{#isMapContainer}}serializer.setMapper({{operationIdCamelCase}}Request::class, {{operationIdCamelCase}}Request.serializer()){{/isMapContainer}} - {{/bodyParam}} - {{/hasBodyParam}} - {{#isListContainer}} - serializer.setMapper({{operationIdCamelCase}}Response::class, {{operationIdCamelCase}}Response.serializer()) - {{/isListContainer}} - {{#isMapContainer}} - serializer.setMapper({{operationIdCamelCase}}Response::class, {{operationIdCamelCase}}Response.serializer()) - {{/isMapContainer}} - {{/operation}} - } - } +{{/operation}} } {{/operations}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache index 618fd7a88903..05447201fb80 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache @@ -4,7 +4,7 @@ class ApiKeyAuth(private val location: String, val paramName: String) : Authenti var apiKey: String? = null var apiKeyPrefix: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val key: String = apiKey ?: return val prefix: String? = apiKeyPrefix val value: String = if (prefix != null) "$prefix $key" else key diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache index 1aab9156d98b..4f7101a95f1b 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache @@ -1,13 +1,11 @@ package {{packageName}}.auth interface Authentication { - /** * Apply authentication settings to header and query params. * * @param query Query parameters. * @param headers Header parameters. */ - fun apply(query: MutableMap>, headers: MutableMap) - + fun apply(query: MutableMap?>, headers: MutableMap) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache index ef6c5888ae14..3a8c5a76cc22 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache @@ -8,7 +8,7 @@ class HttpBasicAuth : Authentication { var password: String? = null @InternalAPI - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { if (username == null && password == null) return val str = (username ?: "") + ":" + (password ?: "") val auth = str.encodeBase64() diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache index 982389d09609..d7ac04766eea 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache @@ -3,7 +3,7 @@ package {{packageName}}.auth class HttpBearerAuth(private val scheme: String?) : Authentication { var bearerToken: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val token: String = bearerToken ?: return headers["Authorization"] = (if (scheme != null) upperCaseBearer(scheme)!! + " " else "") + token } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache index 98bb449a6096..5d9ccf6bb973 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache @@ -3,7 +3,7 @@ package {{packageName}}.auth class OAuth : Authentication { var accessToken: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val token: String = accessToken ?: return headers["Authorization"] = "Bearer $token" } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache index 59392ff8aae6..dbc070fe6f18 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache @@ -7,7 +7,6 @@ group = "{{groupId}}" version = "{{artifactVersion}}" val kotlin_version = "1.3.72" -val kotlinx_io_version = "0.1.16" val ktor_version = "1.3.2" repositories { @@ -30,7 +29,7 @@ kotlin { ios { binaries { framework { - freeCompilerArgs.add("-Xobjc-generics") + freeCompilerArgs = listOf("-Xobjc-generics") } } } @@ -38,19 +37,18 @@ kotlin { sourceSets { val commonMain by getting { - kotlin.srcDir("common/src/main") + kotlin.srcDir("src/common/main") dependencies { implementation(kotlin("stdlib-common")) api("io.ktor:ktor-client-core:$ktor_version") api("io.ktor:ktor-client-json:$ktor_version") api("io.ktor:ktor-client-serialization:$ktor_version") - implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinx_io_version") } } val commonTest by getting { - kotlin.srcDir("common/src/test") + kotlin.srcDir("src/common/test") dependencies { implementation(kotlin("test-common")) @@ -60,7 +58,7 @@ kotlin { } val jvmMain by getting { - kotlin.srcDir("jvm/src/main") + kotlin.srcDir("src/jvm/main") dependencies { implementation(kotlin("stdlib-jdk8")) @@ -71,7 +69,7 @@ kotlin { } val jvmTest by getting { - kotlin.srcDir("jvm/src/test") + kotlin.srcDir("src/jvm/test") dependencies { implementation(kotlin("test")) @@ -82,7 +80,7 @@ kotlin { } val iosMain by getting { - kotlin.srcDir("ios/src/main") + kotlin.srcDir("src/ios/main") dependencies { api("io.ktor:ktor-client-ios:$ktor_version") @@ -92,7 +90,7 @@ kotlin { } val iosTest by getting { - kotlin.srcDir("ios/src/test") + kotlin.srcDir("src/ios/test") dependencies { implementation("io.ktor:ktor-client-mock-native:$ktor_version") @@ -100,7 +98,7 @@ kotlin { } val jsMain by getting { - kotlin.srcDir("js/src/main") + kotlin.srcDir("src/js/main") dependencies { implementation(kotlin("stdlib-js")) @@ -111,7 +109,7 @@ kotlin { } val jsTest by getting { - kotlin.srcDir("js/src/test") + kotlin.srcDir("src/js/test") dependencies { implementation("io.ktor:ktor-client-mock-js:$ktor_version") @@ -119,14 +117,3 @@ kotlin { } } } - -task iosTest { - def device = project.findProperty("device")?.toString() ?: "iPhone 8" - dependsOn("linkDebugTestIosX64") - group = JavaBasePlugin.VERIFICATION_GROUP - description = "Execute unit tests on $device simulator" - doLast { - val binary = kotlin.targets.iosX64.binaries.getTest("DEBUG") - exec { commandLine "xcrun", "simctl", "spawn", device, binary.outputFile } - } -} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache index ae65921bb778..632b95c575f5 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache @@ -2,44 +2,35 @@ package {{packageName}}.infrastructure import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig -import io.ktor.client.call.call import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.JsonFeature -import io.ktor.client.features.json.JsonSerializer import io.ktor.client.features.json.serializer.KotlinxSerializer -import io.ktor.client.request.accept import io.ktor.client.request.forms.FormDataContent import io.ktor.client.request.forms.MultiPartFormDataContent import io.ktor.client.request.header import io.ktor.client.request.parameter -import io.ktor.client.response.HttpResponse +import io.ktor.client.request.request +import io.ktor.client.statement.HttpResponse import io.ktor.client.utils.EmptyContent import io.ktor.http.* import io.ktor.http.content.OutgoingContent import io.ktor.http.content.PartData -import kotlinx.serialization.UnstableDefault import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration -import {{apiPackage}}.* -import {{modelPackage}}.* import {{packageName}}.auth.* {{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient( private val baseUrl: String, httpClientEngine: HttpClientEngine?, - serializer: KotlinxSerializer) { + private val serializer: KotlinxSerializer +) { - @UseExperimental(UnstableDefault::class) constructor( baseUrl: String, httpClientEngine: HttpClientEngine?, - jsonConfiguration: JsonConfiguration) : - this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - - private val serializer: JsonSerializer by lazy { - serializer.apply { setMappers(this) }.ignoreOutgoingContent() - } + jsonConfiguration: JsonConfiguration + ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) private val client: HttpClient by lazy { val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClient.serializer } @@ -47,29 +38,20 @@ import {{packageName}}.auth.* httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) } {{#hasAuthMethods}} - private val authentications: kotlin.collections.Map by lazy { - mapOf({{#authMethods}}{{#isBasic}}{{#isBasicBasic}} + private val authentications: Map = mapOf({{#authMethods}}{{#isBasic}}{{#isBasicBasic}} "{{name}}" to HttpBasicAuth(){{/isBasicBasic}}{{^isBasicBasic}} "{{name}}" to HttpBearerAuth("{{scheme}}"){{/isBasicBasic}}{{/isBasic}}{{#isApiKey}} "{{name}}" to ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"){{/isApiKey}}{{#isOAuth}} - "{{name}}" to OAuth(){{/isOAuth}}{{#hasMore}}, {{/hasMore}}{{/authMethods}}) - } + "{{name}}" to OAuth(){{/isOAuth}}{{#hasMore}}, {{/hasMore}}{{/authMethods}} + ) {{/hasAuthMethods}} + {{^hasAuthMethods}} - private val authentications: kotlin.collections.Map? = null + private val authentications: Map = mapOf() {{/hasAuthMethods}} {{#nonPublicApi}}internal {{/nonPublicApi}}companion object { protected val UNSAFE_HEADERS = listOf(HttpHeaders.ContentType) - - private fun setMappers(serializer: KotlinxSerializer) { - {{#apiInfo}}{{#apis}} - {{classname}}.setMappers(serializer) - {{/apis}}{{/apiInfo}} - {{#models}} - {{#model}}{{^isAlias}}serializer.setMapper({{modelPackage}}.{{classname}}::class, {{modelPackage}}.{{classname}}.{{#isEnum}}Serializer{{/isEnum}}{{^isEnum}}serializer(){{/isEnum}}){{/isAlias}}{{/model}} - {{/models}} - } } /** @@ -78,7 +60,7 @@ import {{packageName}}.auth.* * @param username Username */ 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") auth.username = username } @@ -89,7 +71,7 @@ import {{packageName}}.auth.* * @param password Password */ 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") auth.password = password } @@ -101,7 +83,7 @@ import {{packageName}}.auth.* * @param paramName The name of the API key parameter, or null or set the first key. */ 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") auth.apiKey = apiKey } @@ -113,7 +95,7 @@ import {{packageName}}.auth.* * @param paramName The name of the API key parameter, or null or set the first key. */ 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") auth.apiKeyPrefix = apiKeyPrefix } @@ -124,7 +106,7 @@ import {{packageName}}.auth.* * @param accessToken Access token */ 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") auth.accessToken = accessToken } @@ -135,36 +117,36 @@ import {{packageName}}.auth.* * @param bearerToken The bearer token. */ 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") auth.bearerToken = bearerToken } - protected suspend fun multipartFormRequest(requestConfig: RequestConfig, body: kotlin.collections.List?, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun multipartFormRequest(requestConfig: RequestConfig, body: List?, authNames: List): HttpResponse { return request(requestConfig, MultiPartFormDataContent(body ?: listOf()), authNames) } - protected suspend fun urlEncodedFormRequest(requestConfig: RequestConfig, body: Parameters?, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun urlEncodedFormRequest(requestConfig: RequestConfig, body: Parameters?, authNames: List): HttpResponse { return request(requestConfig, FormDataContent(body ?: Parameters.Empty), authNames) } - protected suspend fun jsonRequest(requestConfig: RequestConfig, body: Any? = null, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun jsonRequest(requestConfig: RequestConfig, body: Any? = null, authNames: List): HttpResponse { val contentType = (requestConfig.headers[HttpHeaders.ContentType]?.let { ContentType.parse(it) } ?: ContentType.Application.Json) return if (body != null) request(requestConfig, serializer.write(body, contentType), authNames) else request(requestConfig, authNames = authNames) } - protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: List): HttpResponse { requestConfig.updateForAuth(authNames) val headers = requestConfig.headers - return client.call { + return client.request { this.url { this.takeFrom(URLBuilder(baseUrl)) appendPath(requestConfig.path.trimStart('/').split('/')) requestConfig.query.forEach { query -> - query.value.forEach { value -> + query.value?.forEach { value -> parameter(query.key, value) } } @@ -174,17 +156,17 @@ import {{packageName}}.auth.* if (requestConfig.method in listOf(RequestMethod.PUT, RequestMethod.POST, RequestMethod.PATCH)) this.body = body - }.response + } } - private fun RequestConfig.updateForAuth(authNames: kotlin.collections.List) { + private fun RequestConfig.updateForAuth(authNames: List) { for (authName in authNames) { - val auth = authentications?.get(authName) ?: throw Exception("Authentication undefined: $authName") + val auth = authentications[authName] ?: throw Exception("Authentication undefined: $authName") auth.apply(query, headers) } } - private fun URLBuilder.appendPath(components: kotlin.collections.List): URLBuilder = apply { + private fun URLBuilder.appendPath(components: List): URLBuilder = apply { encodedPath = encodedPath.trimEnd('/') + components.joinToString("/", prefix = "/") { it.encodeURLQueryComponent() } } @@ -199,13 +181,3 @@ import {{packageName}}.auth.* RequestMethod.OPTIONS -> HttpMethod.Options } } - -// https://github.com/ktorio/ktor/issues/851 -private fun JsonSerializer.ignoreOutgoingContent() = IgnoreOutgoingContentJsonSerializer(this) - -private class IgnoreOutgoingContentJsonSerializer(private val delegate: JsonSerializer) : JsonSerializer by delegate { - override fun write(data: Any): OutgoingContent { - if (data is OutgoingContent) return data - return delegate.write(data) - } -} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache index 168cfc993c3b..14ff8ddf45d8 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache @@ -1,14 +1,13 @@ package {{packageName}}.infrastructure import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor @Serializable class Base64ByteArray(val value: ByteArray) { @Serializer(Base64ByteArray::class) companion object : KSerializer { - override val descriptor = StringDescriptor.withName("Base64ByteArray") - override fun serialize(encoder: Encoder, obj: Base64ByteArray) = encoder.encodeString(obj.value.encodeBase64()) + override val descriptor = PrimitiveDescriptor("Base64ByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: Base64ByteArray) = encoder.encodeString(value.value.encodeBase64()) override fun deserialize(decoder: Decoder) = Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache index b85013e647b2..dc30e36dcc16 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache @@ -1,6 +1,6 @@ package {{packageName}}.infrastructure -import kotlinx.io.core.* +import io.ktor.utils.io.core.* import kotlin.experimental.and private val digits = "0123456789abcdef".toCharArray() @@ -14,7 +14,7 @@ private fun ByteArray.clearFrom(from: Int) = (from until size).forEach { this[it private fun Int.toBase64(): Char = BASE64_ALPHABET[this] private fun Byte.fromBase64(): Byte = BASE64_INVERSE_ALPHABET[toInt() and 0xff].toByte() and BASE64_MASK internal fun ByteArray.encodeBase64(): String = buildPacket { writeFully(this@encodeBase64) }.encodeBase64() -internal fun String.decodeBase64Bytes(): ByteArray = buildPacket { writeStringUtf8(dropLastWhile { it == BASE64_PAD }) }.decodeBase64Bytes().readBytes() +internal fun String.decodeBase64Bytes(): ByteArray = buildPacket { writeText(dropLastWhile { it == BASE64_PAD }) }.decodeBase64Bytes().readBytes() /** * Encode [bytes] as a HEX string with no spaces, newlines and `0x` prefixes. diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/HttpResponse.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/HttpResponse.kt.mustache index 87f27a5cf56f..a570d4a51389 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/HttpResponse.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/HttpResponse.kt.mustache @@ -4,8 +4,9 @@ import io.ktor.client.call.TypeInfo import io.ktor.client.call.typeInfo import io.ktor.http.Headers import io.ktor.http.isSuccess +import io.ktor.client.statement.HttpResponse as KtorHttpResponse -{{#nonPublicApi}}internal {{/nonPublicApi}}open class HttpResponse(val response: io.ktor.client.response.HttpResponse, val provider: BodyProvider) { +{{#nonPublicApi}}internal {{/nonPublicApi}}open class HttpResponse(val response: KtorHttpResponse, val provider: BodyProvider) { val status: Int = response.status.value val success: Boolean = response.status.isSuccess() val headers: Map> = response.headers.mapEntries() @@ -22,29 +23,30 @@ import io.ktor.http.isSuccess } {{#nonPublicApi}}internal {{/nonPublicApi}}interface BodyProvider { - suspend fun body(response: io.ktor.client.response.HttpResponse): T - suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V + suspend fun body(response: KtorHttpResponse): T + suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V } {{#nonPublicApi}}internal {{/nonPublicApi}}class TypedBodyProvider(private val type: TypeInfo) : BodyProvider { @Suppress("UNCHECKED_CAST") - override suspend fun body(response: io.ktor.client.response.HttpResponse): T = - response.call.receive(type) as T + override suspend fun body(response: KtorHttpResponse): T = + response.call.receive(type) as T @Suppress("UNCHECKED_CAST") - override suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V = - response.call.receive(type) as V + override suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V = + response.call.receive(type) as V } -{{#nonPublicApi}}internal {{/nonPublicApi}}class MappedBodyProvider(private val provider: BodyProvider, private val block: S.() -> T) : BodyProvider { - override suspend fun body(response: io.ktor.client.response.HttpResponse): T = - block(provider.body(response)) +{{#nonPublicApi}}internal {{/nonPublicApi}}class MappedBodyProvider(private val provider: BodyProvider, private val block: S.() -> T) : + BodyProvider { + override suspend fun body(response: KtorHttpResponse): T = + block(provider.body(response)) - override suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V = - provider.typedBody(response, type) + override suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V = + provider.typedBody(response, type) } -{{#nonPublicApi}}internal {{/nonPublicApi}}inline fun io.ktor.client.response.HttpResponse.wrap(): HttpResponse = +{{#nonPublicApi}}internal {{/nonPublicApi}}inline fun KtorHttpResponse.wrap(): HttpResponse = HttpResponse(this, TypedBodyProvider(typeInfo())) {{#nonPublicApi}}internal {{/nonPublicApi}}fun HttpResponse.map(block: T.() -> V): HttpResponse = diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache index c23ac3ec0001..3ba3b74be0c0 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache @@ -1,14 +1,13 @@ package {{packageName}}.infrastructure import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor @Serializable class OctetByteArray(val value: ByteArray) { @Serializer(OctetByteArray::class) companion object : KSerializer { - override val descriptor = StringDescriptor.withName("OctetByteArray") - override fun serialize(encoder: Encoder, obj: OctetByteArray) = encoder.encodeString(hex(obj.value)) + override val descriptor = PrimitiveDescriptor("OctetByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: OctetByteArray) = encoder.encodeString(hex(value.value)) override fun deserialize(decoder: Decoder) = OctetByteArray(hex(decoder.decodeString())) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache new file mode 100644 index 000000000000..56ca714971ea --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache @@ -0,0 +1,16 @@ +package {{packageName}}.infrastructure + +/** + * Defines a config object for a given request. + * NOTE: This object doesn't include 'body' because it + * allows for caching of the constructed object + * for many request definitions. + * NOTE: Headers is a Map because rfc2616 defines + * multi-valued headers as csv-only. + */ +{{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig( + val method: RequestMethod, + val path: String, + val headers: MutableMap = mutableMapOf(), + val query: MutableMap?> = mutableMapOf() +) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/jvmTest/Coroutine.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/jvmTest/Coroutine.kt.mustache index 351c0120b7b1..5a4da4ee0f53 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/jvmTest/Coroutine.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/jvmTest/Coroutine.kt.mustache @@ -3,6 +3,7 @@ package util import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.runBlocking import kotlin.coroutines.EmptyCoroutineContext -internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = kotlinx.coroutines.runBlocking(EmptyCoroutineContext, block) +internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = runBlocking(EmptyCoroutineContext, block) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache index a44a242cbd2d..d637b98683bd 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache @@ -2,9 +2,12 @@ private class {{operationIdCamelCase}}Request(val value: List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>) { @Serializer({{operationIdCamelCase}}Request::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Request> { - private val serializer: KSerializer> = {{#bodyParam}}{{baseType}}{{/bodyParam}}.serializer().list - override val descriptor = StringDescriptor.withName("{{operationIdCamelCase}}Request") - override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) + private val serializer = {{#bodyParam}}{{baseType}}{{/bodyParam}}.serializer().list + override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Request", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) } } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_map.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_map.mustache index 5dc6864aae82..011c57d6c662 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_map.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_map.mustache @@ -3,8 +3,8 @@ @Serializer({{operationIdCamelCase}}Request::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Request> { private val serializer: KSerializer> = (kotlin.String.serializer() to {{#bodyParam}}{{baseType}}{{/bodyParam}}.serializer()).map - override val descriptor = StringDescriptor.withName("{{operationIdCamelCase}}Request") - override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, obj.value) + override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Request", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request) = serializer.serialize(encoder, value.value) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) } } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache index a4e70a219ca4..c3ba3adce3d1 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache @@ -2,9 +2,12 @@ private class {{operationIdCamelCase}}Response(val value: List<{{returnBaseType}}>) { @Serializer({{operationIdCamelCase}}Response::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Response> { - private val serializer: KSerializer> = {{returnBaseType}}.serializer().list - override val descriptor = StringDescriptor.withName("{{operationIdCamelCase}}Response") - override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) + private val serializer = {{returnBaseType}}.serializer().list + override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Response", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) } } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_map.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_map.mustache index 8253dc1f1a1c..7c747b1e4257 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_map.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_map.mustache @@ -3,8 +3,8 @@ @Serializer({{operationIdCamelCase}}Response::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Response> { private val serializer: KSerializer> = (kotlin.String.serializer() to {{returnBaseType}}.serializer()).map - override val descriptor = StringDescriptor.withName("{{operationIdCamelCase}}Response") - override fun serialize(encoder: Encoder, obj: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, obj.value) + override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Response", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response) = serializer.serialize(encoder, value.value) override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) } } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache index 448dc07602e2..cc08101c2a29 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/settings.gradle.mustache @@ -1 +1 @@ -rootProject.name = '{{artifactId}}' \ No newline at end of file +rootProject.name = '{{artifactId}}' diff --git a/samples/client/petstore/kotlin-gson/README.md b/samples/client/petstore/kotlin-gson/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-gson/README.md +++ b/samples/client/petstore/kotlin-gson/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-gson/docs/Order.md b/samples/client/petstore/kotlin-gson/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-gson/docs/Order.md +++ b/samples/client/petstore/kotlin-gson/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-gson/docs/Pet.md b/samples/client/petstore/kotlin-gson/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-gson/docs/Pet.md +++ b/samples/client/petstore/kotlin-gson/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-gson/settings.gradle b/samples/client/petstore/kotlin-gson/settings.gradle index 207bc66a067c..a36725d2cb61 100644 --- a/samples/client/petstore/kotlin-gson/settings.gradle +++ b/samples/client/petstore/kotlin-gson/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-gson' \ No newline at end of file +rootProject.name = 'kotlin-petstore-gson' diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 54df813fceec..6409c6cc0f3b 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @SerializedName("code") + val code: kotlin.Int? = null, @SerializedName("type") + val type: kotlin.String? = null, @SerializedName("message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt index fdefa74fda0b..65412f610b3c 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt index 049c89df3134..8375127110e3 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.google.gson.annotations.SerializedName * @param complete */ -data class Order ( +data class Order( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("petId") + val petId: kotlin.Long? = null, @SerializedName("quantity") + val quantity: kotlin.Int? = null, @SerializedName("shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @SerializedName("status") + val status: Order.Status? = null, @SerializedName("complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @SerializedName(value = "placed") placed("placed"), @SerializedName(value = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt index af29ef2b61b7..e852fd3fa4da 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.google.gson.annotations.SerializedName * @param status pet status in the store */ -data class Pet ( +data class Pet( @SerializedName("name") val name: kotlin.String, @SerializedName("photoUrls") val photoUrls: kotlin.collections.List, @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("category") + val category: Category? = null, @SerializedName("tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @SerializedName("status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @SerializedName(value = "available") available("available"), @SerializedName(value = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt index 28e82b1df685..380648dcd14f 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt index 62baf33e927e..f84ff3078256 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.google.gson.annotations.SerializedName * @param userStatus User Status */ -data class User ( +data class User( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("username") + val username: kotlin.String? = null, @SerializedName("firstName") + val firstName: kotlin.String? = null, @SerializedName("lastName") + val lastName: kotlin.String? = null, @SerializedName("email") + val email: kotlin.String? = null, @SerializedName("password") + val password: kotlin.String? = null, @SerializedName("phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @SerializedName("userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-jackson/README.md b/samples/client/petstore/kotlin-jackson/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-jackson/README.md +++ b/samples/client/petstore/kotlin-jackson/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-jackson/docs/Order.md b/samples/client/petstore/kotlin-jackson/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-jackson/docs/Order.md +++ b/samples/client/petstore/kotlin-jackson/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-jackson/docs/Pet.md b/samples/client/petstore/kotlin-jackson/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-jackson/docs/Pet.md +++ b/samples/client/petstore/kotlin-jackson/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-jackson/settings.gradle b/samples/client/petstore/kotlin-jackson/settings.gradle index 28e8da587f0d..ef91c4caa687 100644 --- a/samples/client/petstore/kotlin-jackson/settings.gradle +++ b/samples/client/petstore/kotlin-jackson/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-jackson' \ No newline at end of file +rootProject.name = 'kotlin-petstore-jackson' diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index c341f8ca321b..d188547f6092 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @field:JsonProperty("code") + val code: kotlin.Int? = null, @field:JsonProperty("type") + val type: kotlin.String? = null, @field:JsonProperty("message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt index 2ed5390c1f3a..282700d38784 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @field:JsonProperty("id") + val id: kotlin.Long? = null, @field:JsonProperty("name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt index c7df5b55614b..9355bd6ac312 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.fasterxml.jackson.annotation.JsonProperty * @param complete */ -data class Order ( +data class Order( @field:JsonProperty("id") + val id: kotlin.Long? = null, @field:JsonProperty("petId") + val petId: kotlin.Long? = null, @field:JsonProperty("quantity") + val quantity: kotlin.Int? = null, @field:JsonProperty("shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @field:JsonProperty("status") + val status: Order.Status? = null, @field:JsonProperty("complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: PLACED,APPROVED,DELIVERED - */ - + * Order Status + * + * Values: PLACED,APPROVED,DELIVERED + */ enum class Status(val value: kotlin.String){ @JsonProperty(value = "placed") PLACED("placed"), @JsonProperty(value = "approved") APPROVED("approved"), diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt index be5b168e2d8b..f929547b0f35 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.fasterxml.jackson.annotation.JsonProperty * @param status pet status in the store */ -data class Pet ( +data class Pet( @field:JsonProperty("name") val name: kotlin.String, @field:JsonProperty("photoUrls") val photoUrls: kotlin.collections.List, @field:JsonProperty("id") + val id: kotlin.Long? = null, @field:JsonProperty("category") + val category: Category? = null, @field:JsonProperty("tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @field:JsonProperty("status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: AVAILABLE,PENDING,SOLD - */ - + * pet status in the store + * + * Values: AVAILABLE,PENDING,SOLD + */ enum class Status(val value: kotlin.String){ @JsonProperty(value = "available") AVAILABLE("available"), @JsonProperty(value = "pending") PENDING("pending"), diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt index 7243f42ed7d8..106b57ab299c 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @field:JsonProperty("id") + val id: kotlin.Long? = null, @field:JsonProperty("name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt index e8f639e50928..15bdd07bfa22 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.fasterxml.jackson.annotation.JsonProperty +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.fasterxml.jackson.annotation.JsonProperty * @param userStatus User Status */ -data class User ( +data class User( @field:JsonProperty("id") + val id: kotlin.Long? = null, @field:JsonProperty("username") + val username: kotlin.String? = null, @field:JsonProperty("firstName") + val firstName: kotlin.String? = null, @field:JsonProperty("lastName") + val lastName: kotlin.String? = null, @field:JsonProperty("email") + val email: kotlin.String? = null, @field:JsonProperty("password") + val password: kotlin.String? = null, @field:JsonProperty("phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @field:JsonProperty("userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/README.md b/samples/client/petstore/kotlin-json-request-string/README.md index 971d17b1e244..ed9b800a0f17 100644 --- a/samples/client/petstore/kotlin-json-request-string/README.md +++ b/samples/client/petstore/kotlin-json-request-string/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-json-request-string/docs/Order.md b/samples/client/petstore/kotlin-json-request-string/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-json-request-string/docs/Order.md +++ b/samples/client/petstore/kotlin-json-request-string/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-json-request-string/docs/Pet.md b/samples/client/petstore/kotlin-json-request-string/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-json-request-string/docs/Pet.md +++ b/samples/client/petstore/kotlin-json-request-string/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-json-request-string/settings.gradle b/samples/client/petstore/kotlin-json-request-string/settings.gradle index 24764e682e75..dedd56bdccd0 100644 --- a/samples/client/petstore/kotlin-json-request-string/settings.gradle +++ b/samples/client/petstore/kotlin-json-request-string/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-json-request-string' \ No newline at end of file +rootProject.name = 'kotlin-petstore-json-request-string' diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 584c6ef06867..fb60b108c955 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..36db4bcb996f 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..653069f5198b 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt index a66c335904e7..bf6fb8a4d2cc 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index a3df06cb6eb3..e800cb5f94f6 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..f8b04268ae3d 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..a8efdaeb5fe0 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/README.md b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/README.md +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Order.md b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Order.md +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Pet.md b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Pet.md +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/settings.gradle b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/settings.gradle index 6ca85294a549..47dee9b11801 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/settings.gradle +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-okhttp4-coroutines-client' \ No newline at end of file +rootProject.name = 'kotlin-petstore-okhttp4-coroutines-client' diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 1cff24913d64..f1f3c09d6310 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index deb7ba6cf49f..2ba42eb5ab72 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 6494674c7f3d..bf66ae623488 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fc89bf34e7fc..b477db1469e8 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,33 +1,38 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @SerializedName("code") + val code: kotlin.Int? = null, @SerializedName("type") + val type: kotlin.String? = null, @SerializedName("message") + val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt index b483bee69b3e..b07978b706e6 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt index d6bacf867c47..454fbcf9156a 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -25,19 +27,27 @@ import java.io.Serializable * @param complete */ -data class Order ( +data class Order( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("petId") + val petId: kotlin.Long? = null, @SerializedName("quantity") + val quantity: kotlin.Int? = null, @SerializedName("shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @SerializedName("status") + val status: Order.Status? = null, @SerializedName("complete") + val complete: kotlin.Boolean? = null ) : Serializable { companion object { @@ -45,10 +55,10 @@ data class Order ( } /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @SerializedName(value = "placed") placed("placed"), @SerializedName(value = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt index afa65785d387..ffcb6f11dcc4 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category @@ -16,9 +16,11 @@ import org.openapitools.client.models.Tag import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -27,19 +29,25 @@ import java.io.Serializable * @param status pet status in the store */ -data class Pet ( +data class Pet( @SerializedName("name") val name: kotlin.String, @SerializedName("photoUrls") val photoUrls: kotlin.collections.List, @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("category") + val category: Category? = null, @SerializedName("tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @SerializedName("status") + val status: Pet.Status? = null ) : Serializable { companion object { @@ -47,10 +55,10 @@ data class Pet ( } /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @SerializedName(value = "available") available("available"), @SerializedName(value = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt index a1a282cb38df..febd9eae0818 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt index 59ba0254f603..0de0ad65eebe 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.google.gson.annotations.SerializedName import java.io.Serializable +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -27,23 +29,33 @@ import java.io.Serializable * @param userStatus User Status */ -data class User ( +data class User( @SerializedName("id") + val id: kotlin.Long? = null, @SerializedName("username") + val username: kotlin.String? = null, @SerializedName("firstName") + val firstName: kotlin.String? = null, @SerializedName("lastName") + val lastName: kotlin.String? = null, @SerializedName("email") + val email: kotlin.String? = null, @SerializedName("password") + val password: kotlin.String? = null, @SerializedName("phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @SerializedName("userStatus") + val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-moshi-codegen/README.md b/samples/client/petstore/kotlin-moshi-codegen/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/README.md +++ b/samples/client/petstore/kotlin-moshi-codegen/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-moshi-codegen/docs/Order.md b/samples/client/petstore/kotlin-moshi-codegen/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/docs/Order.md +++ b/samples/client/petstore/kotlin-moshi-codegen/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-moshi-codegen/docs/Pet.md b/samples/client/petstore/kotlin-moshi-codegen/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/docs/Pet.md +++ b/samples/client/petstore/kotlin-moshi-codegen/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-moshi-codegen/settings.gradle b/samples/client/petstore/kotlin-moshi-codegen/settings.gradle index 692eb84d7e19..a49864cc295c 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/settings.gradle +++ b/samples/client/petstore/kotlin-moshi-codegen/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-moshi-codegen' \ No newline at end of file +rootProject.name = 'kotlin-petstore-moshi-codegen' diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 18d2ce3dbbe7..e9f96bf1c999 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,33 +1,38 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ @JsonClass(generateAdapter = true) -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt index 8396fa423574..0fa0d400851c 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ @JsonClass(generateAdapter = true) -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt index d7091dd4c0c2..5544a8f122cb 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -25,27 +27,35 @@ import com.squareup.moshi.JsonClass * @param complete */ @JsonClass(generateAdapter = true) -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt index 8b4e6b44d4cc..1d4b7ebc2f3c 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category @@ -16,9 +16,11 @@ import org.openapitools.client.models.Tag import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -27,27 +29,33 @@ import com.squareup.moshi.JsonClass * @param status pet status in the store */ @JsonClass(generateAdapter = true) -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt index e7cdab2bb5df..4b382da5e4d9 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ @JsonClass(generateAdapter = true) -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt index 1bfad8449046..0a51a7fb86b6 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -27,23 +29,33 @@ import com.squareup.moshi.JsonClass * @param userStatus User Status */ @JsonClass(generateAdapter = true) -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator-ignore b/samples/client/petstore/kotlin-multiplatform/.openapi-generator-ignore index 93eeb6b49403..7484ee590a38 100644 --- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator-ignore +++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator-ignore @@ -1,5 +1,23 @@ # OpenAPI Generator Ignore -gradle/wrapper/gradle-wrapper.jar -gradle/wrapper/gradle-wrapper.properties -gradlew -gradlew.bat +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES index e79293ae5715..d14d905efe4f 100644 --- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES @@ -1,5 +1,5 @@ README.md -build.gradle +build.gradle.kts docs/ApiResponse.md docs/Category.md docs/Order.md @@ -9,30 +9,35 @@ docs/StoreApi.md docs/Tag.md docs/User.md docs/UserApi.md -settings.gradle -src/commonMain/kotlin/org/openapitools/client/apis/PetApi.kt -src/commonMain/kotlin/org/openapitools/client/apis/StoreApi.kt -src/commonMain/kotlin/org/openapitools/client/apis/UserApi.kt -src/commonMain/kotlin/org/openapitools/client/auth/ApiKeyAuth.kt -src/commonMain/kotlin/org/openapitools/client/auth/Authentication.kt -src/commonMain/kotlin/org/openapitools/client/auth/HttpBasicAuth.kt -src/commonMain/kotlin/org/openapitools/client/auth/HttpBearerAuth.kt -src/commonMain/kotlin/org/openapitools/client/auth/OAuth.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/Base64ByteArray.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/Bytes.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/HttpResponse.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/OctetByteArray.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt -src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt -src/commonMain/kotlin/org/openapitools/client/models/ApiResponse.kt -src/commonMain/kotlin/org/openapitools/client/models/Category.kt -src/commonMain/kotlin/org/openapitools/client/models/Order.kt -src/commonMain/kotlin/org/openapitools/client/models/Pet.kt -src/commonMain/kotlin/org/openapitools/client/models/Tag.kt -src/commonMain/kotlin/org/openapitools/client/models/User.kt -src/commonTest/kotlin/util/Coroutine.kt -src/iosTest/kotlin/util/Coroutine.kt -src/jsTest/kotlin/util/Coroutine.kt -src/jvmTest/kotlin/util/Coroutine.kt +gradle.properties +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +gradlew +gradlew.bat +settings.gradle.kts +src/common/main/org/openapitools/client/apis/PetApi.kt +src/common/main/org/openapitools/client/apis/StoreApi.kt +src/common/main/org/openapitools/client/apis/UserApi.kt +src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt +src/common/main/org/openapitools/client/auth/Authentication.kt +src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt +src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt +src/common/main/org/openapitools/client/auth/OAuth.kt +src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt +src/common/main/org/openapitools/client/infrastructure/ApiClient.kt +src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt +src/common/main/org/openapitools/client/infrastructure/Bytes.kt +src/common/main/org/openapitools/client/infrastructure/HttpResponse.kt +src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt +src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt +src/common/main/org/openapitools/client/infrastructure/RequestMethod.kt +src/common/main/org/openapitools/client/models/ApiResponse.kt +src/common/main/org/openapitools/client/models/Category.kt +src/common/main/org/openapitools/client/models/Order.kt +src/common/main/org/openapitools/client/models/Pet.kt +src/common/main/org/openapitools/client/models/Tag.kt +src/common/main/org/openapitools/client/models/User.kt +src/common/test/util/Coroutine.kt +src/ios/test/util/Coroutine.kt +src/js/test/util/Coroutine.kt +src/jvm/test/util/Coroutine.kt diff --git a/samples/client/petstore/kotlin-multiplatform/README.md b/samples/client/petstore/kotlin-multiplatform/README.md index 308e8b1c99ef..a5b79d8bbbba 100644 --- a/samples/client/petstore/kotlin-multiplatform/README.md +++ b/samples/client/petstore/kotlin-multiplatform/README.md @@ -2,7 +2,7 @@ ## Requires -* Kotlin 1.3.50 +* Kotlin 1.3.72 ## Build @@ -19,7 +19,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -48,7 +48,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -59,17 +59,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-multiplatform/build.gradle b/samples/client/petstore/kotlin-multiplatform/build.gradle deleted file mode 100644 index 47045bb577e1..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/build.gradle +++ /dev/null @@ -1,161 +0,0 @@ -apply plugin: 'kotlin-multiplatform' -apply plugin: 'kotlinx-serialization' - -group 'org.openapitools' -version '1.0.0' - -ext { - kotlin_version = '1.3.50' - kotlinx_version = '1.1.0' - coroutines_version = '1.3.1' - serialization_version = '0.12.0' - ktor_version = '1.2.4' -} - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50" // $kotlin_version - classpath "org.jetbrains.kotlin:kotlin-serialization:1.3.50" // $kotlin_version - } -} - -repositories { - jcenter() -} - -kotlin { - jvm() - iosArm64() { binaries { framework { freeCompilerArgs.add("-Xobjc-generics") } } } - iosX64() { binaries { framework { freeCompilerArgs.add("-Xobjc-generics") } } } - js() - - sourceSets { - commonMain { - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version" - api "io.ktor:ktor-client-core:$ktor_version" - api "io.ktor:ktor-client-json:$ktor_version" - api "io.ktor:ktor-client-serialization:$ktor_version" - } - } - - commonTest { - dependencies { - implementation "org.jetbrains.kotlin:kotlin-test-common" - implementation "org.jetbrains.kotlin:kotlin-test-annotations-common" - implementation "io.ktor:ktor-client-mock:$ktor_version" - } - } - - jvmMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version" - api "io.ktor:ktor-client-core-jvm:$ktor_version" - api "io.ktor:ktor-client-json-jvm:$ktor_version" - api "io.ktor:ktor-client-serialization-jvm:$ktor_version" - } - } - - jvmTest { - dependsOn commonTest - dependencies { - implementation "org.jetbrains.kotlin:kotlin-test" - implementation "org.jetbrains.kotlin:kotlin-test-junit" - implementation "io.ktor:ktor-client-mock-jvm:$ktor_version" - } - } - - iosMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version" - api "io.ktor:ktor-client-ios:$ktor_version" - } - } - - iosTest { - dependsOn commonTest - dependencies { - implementation "io.ktor:ktor-client-mock-native:$ktor_version" - } - } - - iosArm64().compilations.main.defaultSourceSet { - dependsOn iosMain - dependencies { - api "io.ktor:ktor-client-ios-iosarm64:$ktor_version" - api "io.ktor:ktor-client-json-iosarm64:$ktor_version" - api "io.ktor:ktor-client-serialization-iosarm64:$ktor_version" - } - } - - iosArm64().compilations.test.defaultSourceSet { - dependsOn iosTest - } - - iosX64().compilations.main.defaultSourceSet { - dependsOn iosMain - dependencies { - api "io.ktor:ktor-client-ios-iosx64:$ktor_version" - api "io.ktor:ktor-client-json-iosx64:$ktor_version" - api "io.ktor:ktor-client-serialization-iosx64:$ktor_version" - } - } - - jsMain { - dependsOn commonMain - dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version" - api "io.ktor:ktor-client-js:$ktor_version" - api "io.ktor:ktor-client-json-js:$ktor_version" - api "io.ktor:ktor-client-serialization-js:$ktor_version" - } - } - - jsTest { - dependsOn commonTest - dependencies { - implementation "io.ktor:ktor-client-mock-js:$ktor_version" - implementation "io.ktor:ktor-client-js:$ktor_version" - implementation "io.ktor:ktor-client-json:$ktor_version" - implementation "io.ktor:ktor-client-serialization-js:$ktor_version" - } - } - - iosX64().compilations.test.defaultSourceSet { - dependsOn iosTest - } - - all { - languageSettings { - useExperimentalAnnotation('kotlin.Experimental') - } - } - } -} - -task iosTest { - def device = project.findProperty("device")?.toString() ?: "iPhone 8" - dependsOn 'linkDebugTestIosX64' - group = JavaBasePlugin.VERIFICATION_GROUP - description = "Execute unit tests on ${device} simulator" - doLast { - def binary = kotlin.targets.iosX64.binaries.getTest('DEBUG') - exec { commandLine 'xcrun', 'simctl', 'spawn', device, binary.outputFile } - } -} - -configurations { // workaround for https://youtrack.jetbrains.com/issue/KT-27170 - compileClasspath -} diff --git a/samples/client/petstore/kotlin-multiplatform/build.gradle.kts b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts new file mode 100644 index 000000000000..8093161799af --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts @@ -0,0 +1,119 @@ +plugins { + kotlin("multiplatform") version "1.3.72" + kotlin("plugin.serialization") version "1.3.72" +} + +group = "org.openapitools" +version = "1.0.0" + +val kotlin_version = "1.3.72" +val ktor_version = "1.3.2" + +repositories { + jcenter() +} + +kotlin { + /* + * To find out how to configure the targets, please follow the link: + * https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#setting-up-targets + */ + jvm { + val main by compilations.getting { + kotlinOptions { + // Setup the Kotlin compiler options for the 'main' compilation: + jvmTarget = "1.8" + } + } + } + ios { + binaries { + framework { + freeCompilerArgs = listOf("-Xobjc-generics") + } + } + } + js() + + sourceSets { + val commonMain by getting { + kotlin.srcDir("src/common/main") + + dependencies { + implementation(kotlin("stdlib-common")) + api("io.ktor:ktor-client-core:$ktor_version") + api("io.ktor:ktor-client-json:$ktor_version") + api("io.ktor:ktor-client-serialization:$ktor_version") + } + } + + val commonTest by getting { + kotlin.srcDir("src/common/test") + + dependencies { + implementation(kotlin("test-common")) + implementation(kotlin("test-annotations-common")) + implementation("io.ktor:ktor-client-mock:$ktor_version") + } + } + + val jvmMain by getting { + kotlin.srcDir("src/jvm/main") + + dependencies { + implementation(kotlin("stdlib-jdk8")) + api("io.ktor:ktor-client-core-jvm:$ktor_version") + api("io.ktor:ktor-client-json-jvm:$ktor_version") + api("io.ktor:ktor-client-serialization-jvm:$ktor_version") + } + } + + val jvmTest by getting { + kotlin.srcDir("src/jvm/test") + + dependencies { + implementation(kotlin("test")) + implementation(kotlin("test-junit5")) + implementation("org.junit.jupiter:junit-jupiter:5.6.2") + implementation("io.ktor:ktor-client-mock-jvm:$ktor_version") + } + } + + val iosMain by getting { + kotlin.srcDir("src/ios/main") + + dependencies { + api("io.ktor:ktor-client-ios:$ktor_version") + api("io.ktor:ktor-client-json-native:$ktor_version") + api("io.ktor:ktor-client-serialization-native:$ktor_version") + } + } + + val iosTest by getting { + kotlin.srcDir("src/ios/test") + + dependencies { + implementation("io.ktor:ktor-client-mock-native:$ktor_version") + } + } + + val jsMain by getting { + kotlin.srcDir("src/js/main") + + dependencies { + implementation(kotlin("stdlib-js")) + api("io.ktor:ktor-client-js:$ktor_version") + api("io.ktor:ktor-client-json-js:$ktor_version") + api("io.ktor:ktor-client-serialization-js:$ktor_version") + } + } + + val jsTest by getting { + kotlin.srcDir("src/js/test") + + dependencies { + implementation("io.ktor:ktor-client-mock-js:$ktor_version") + } + } + } +} diff --git a/samples/client/petstore/kotlin-multiplatform/docs/Order.md b/samples/client/petstore/kotlin-multiplatform/docs/Order.md index 4683c14c1cbe..25e712e47289 100644 --- a/samples/client/petstore/kotlin-multiplatform/docs/Order.md +++ b/samples/client/petstore/kotlin-multiplatform/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-multiplatform/docs/Pet.md b/samples/client/petstore/kotlin-multiplatform/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-multiplatform/docs/Pet.md +++ b/samples/client/petstore/kotlin-multiplatform/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-multiplatform/gradle.properties b/samples/client/petstore/kotlin-multiplatform/gradle.properties new file mode 100644 index 000000000000..29e08e8ca88f --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.jar b/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.jar index cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b..61b67b54bbb73d5f06e32a3f4783a9277ee421a2 100644 GIT binary patch literal 99747 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 V1maxf=U0q>I0|2>c_W!E{}29qCFuYF literal 58702 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

@up^y4&I8N>~wvL%f(S2W%NN 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 D613UA diff --git a/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.properties b/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.properties index 6ce793f21e85..8f38dbc2bfd8 100644 --- a/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.properties +++ b/samples/client/petstore/kotlin-multiplatform/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue May 17 23:08:05 CST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip diff --git a/samples/client/petstore/kotlin-multiplatform/gradlew b/samples/client/petstore/kotlin-multiplatform/gradlew old mode 100755 new mode 100644 index 2fe81a7d95e4..9d82f7891513 --- a/samples/client/petstore/kotlin-multiplatform/gradlew +++ b/samples/client/petstore/kotlin-multiplatform/gradlew @@ -1,20 +1,4 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# +#!/usr/bin/env bash ############################################################################## ## @@ -22,38 +6,20 @@ ## ############################################################################## -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn () { +warn ( ) { echo "$*" } -die () { +die ( ) { echo echo "$*" echo @@ -64,7 +30,6 @@ die () { cygwin=false msys=false darwin=false -nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -75,11 +40,26 @@ case "`uname`" in MINGW* ) msys=true ;; - NONSTOP* ) - nonstop=true - ;; esac +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -105,7 +85,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -125,8 +105,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -154,30 +134,27 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=`expr $i + 1` + i=$((i+1)) done case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/client/petstore/kotlin-multiplatform/gradlew.bat b/samples/client/petstore/kotlin-multiplatform/gradlew.bat index 24467a141f79..5f192121eb4f 100644 --- a/samples/client/petstore/kotlin-multiplatform/gradlew.bat +++ b/samples/client/petstore/kotlin-multiplatform/gradlew.bat @@ -1,100 +1,90 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/client/petstore/kotlin-multiplatform/pom.xml b/samples/client/petstore/kotlin-multiplatform/pom.xml deleted file mode 100644 index bf62ae66e66c..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - 4.0.0 - io.swagger - KotlinMultiPlatformClientTests - pom - 1.0-SNAPSHOT - Kotlin MultiPlatform Petstore Client - - - - maven-dependency-plugin - - - package - - copy-dependencies - - - ${project.build.directory} - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - bundle-test - integration-test - - exec - - - /bin/bash - - gradlew - build - - - - - - - - diff --git a/samples/client/petstore/kotlin-multiplatform/settings.gradle b/samples/client/petstore/kotlin-multiplatform/settings.gradle deleted file mode 100644 index b000833f485c..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -enableFeaturePreview('GRADLE_METADATA') -rootProject.name = 'kotlin-client-petstore-multiplatform' \ No newline at end of file diff --git a/samples/client/petstore/kotlin-multiplatform/settings.gradle.kts b/samples/client/petstore/kotlin-multiplatform/settings.gradle.kts new file mode 100644 index 000000000000..bbbfee48d652 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "kotlin-client-petstore-multiplatform" diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt similarity index 65% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/PetApi.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt index e164a6cf4d06..2a68d42db119 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse @@ -16,26 +16,26 @@ import org.openapitools.client.models.Pet import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData -import kotlinx.serialization.UnstableDefault import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.serializer.KotlinxSerializer +import io.ktor.client.request.forms.FormPart import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor +import kotlinx.serialization.builtins.list +import kotlinx.serialization.builtins.serializer -class PetApi @UseExperimental(UnstableDefault::class) constructor( +class PetApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer ) : ApiClient(baseUrl, httpClientEngine, serializer) { - @UseExperimental(UnstableDefault::class) constructor( - baseUrl: kotlin.String = "http://petstore.swagger.io/v2", + baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Default + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) /** @@ -44,15 +44,18 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @param body Pet object that needs to be added to the store * @return void */ - suspend fun addPet(body: Pet): HttpResponse { - + suspend fun addPet( + body: Pet + ): HttpResponse { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = body - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, @@ -69,7 +72,6 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( } - /** * Deletes a pet * @@ -77,21 +79,25 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @param apiKey (optional) * @return void */ - suspend fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?): HttpResponse { - + suspend fun deletePet( + petId: kotlin.Long, + apiKey: kotlin.String? = null + ): HttpResponse { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() - apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } + val localVariableHeaders = mutableMapOf( + "api_key" to this?.toString() + ) val localVariableConfig = RequestConfig( RequestMethod.DELETE, - "/pet/{petId}".replace("{" + "petId" + "}", "$petId"), + "/pet/{petId}".replace("petId", "$petId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -102,8 +108,6 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Finds Pets by status * Multiple status values can be provided with comma separated strings @@ -111,17 +115,20 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @return kotlin.collections.List */ @Suppress("UNCHECKED_CAST") - suspend fun findPetsByStatus(status: kotlin.collections.List): HttpResponse> { - + suspend fun findPetsByStatus( + status: kotlin.collections.List + ): HttpResponse> { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() - status?.apply { localVariableQuery["status"] = toMultiValue(this, "csv") } + val localVariableQuery = mutableMapOf?>( + "status" to status?.let { toMultiValue(it, "csv") } + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, @@ -136,18 +143,19 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap().map { value } } - @Serializable private class FindPetsByStatusResponse(val value: List) { @Serializer(FindPetsByStatusResponse::class) companion object : KSerializer { - private val serializer: KSerializer> = Pet.serializer().list - override val descriptor = StringDescriptor.withName("FindPetsByStatusResponse") - override fun serialize(encoder: Encoder, obj: FindPetsByStatusResponse) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = FindPetsByStatusResponse(serializer.deserialize(decoder)) + private val serializer = Pet.serializer().list + override val descriptor = PrimitiveDescriptor("FindPetsByStatusResponse", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: FindPetsByStatusResponse) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = FindPetsByStatusResponse(serializer.deserialize(decoder)) } } - /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. @@ -155,17 +163,20 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @return kotlin.collections.List */ @Suppress("UNCHECKED_CAST") - suspend fun findPetsByTags(tags: kotlin.collections.List): HttpResponse> { - + suspend fun findPetsByTags( + tags: kotlin.collections.List + ): HttpResponse> { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() - tags?.apply { localVariableQuery["tags"] = toMultiValue(this, "csv") } + val localVariableQuery = mutableMapOf?>( + "tags" to tags?.let { toMultiValue(it, "csv") } + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, @@ -180,18 +191,19 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap().map { value } } - @Serializable private class FindPetsByTagsResponse(val value: List) { @Serializer(FindPetsByTagsResponse::class) companion object : KSerializer { - private val serializer: KSerializer> = Pet.serializer().list - override val descriptor = StringDescriptor.withName("FindPetsByTagsResponse") - override fun serialize(encoder: Encoder, obj: FindPetsByTagsResponse) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = FindPetsByTagsResponse(serializer.deserialize(decoder)) + private val serializer = Pet.serializer().list + override val descriptor = PrimitiveDescriptor("FindPetsByTagsResponse", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: FindPetsByTagsResponse) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = FindPetsByTagsResponse(serializer.deserialize(decoder)) } } - /** * Find pet by ID * Returns a single pet @@ -199,20 +211,23 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @return Pet */ @Suppress("UNCHECKED_CAST") - suspend fun getPetById(petId: kotlin.Long): HttpResponse { - + suspend fun getPetById( + petId: kotlin.Long + ): HttpResponse { val localVariableAuthNames = listOf("api_key") val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, - "/pet/{petId}".replace("{" + "petId" + "}", "$petId"), + "/pet/{petId}".replace("petId", "$petId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -223,23 +238,24 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Update an existing pet * * @param body Pet object that needs to be added to the store * @return void */ - suspend fun updatePet(body: Pet): HttpResponse { - + suspend fun updatePet( + body: Pet + ): HttpResponse { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = body - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.PUT, @@ -256,7 +272,6 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( } - /** * Updates a pet in the store with form data * @@ -265,8 +280,11 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @param status Updated status of the pet (optional) * @return void */ - suspend fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?): HttpResponse { - + suspend fun updatePetWithForm( + petId: kotlin.Long, + name: kotlin.String? = null, + status: kotlin.String? = null + ): HttpResponse { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = @@ -275,13 +293,15 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( status?.apply { it.append("status", status.toString()) } }.build() - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, - "/pet/{petId}".replace("{" + "petId" + "}", "$petId"), + "/pet/{petId}".replace("petId", "$petId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -292,8 +312,6 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * uploads an image * @@ -303,23 +321,28 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( * @return ApiResponse */ @Suppress("UNCHECKED_CAST") - suspend fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: io.ktor.client.request.forms.InputProvider?): HttpResponse { - + suspend fun uploadFile( + petId: kotlin.Long, + additionalMetadata: kotlin.String? = null, + file: io.ktor.client.request.forms.InputProvider? = null + ): HttpResponse { val localVariableAuthNames = listOf("petstore_auth") val localVariableBody = formData { - additionalMetadata?.apply { append("additionalMetadata", additionalMetadata) } - file?.apply { append("file", file) } + additionalMetadata?.let { append(FormPart("additionalMetadata", it)) } + file?.let { append(FormPart("file", it)) } } - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, - "/pet/{petId}/uploadImage".replace("{" + "petId" + "}", "$petId"), + "/pet/{petId}/uploadImage".replace("petId", "$petId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -330,15 +353,4 @@ class PetApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - - - companion object { - internal fun setMappers(serializer: KotlinxSerializer) { - - serializer.setMapper(FindPetsByStatusResponse::class, FindPetsByStatusResponse.serializer()) - serializer.setMapper(FindPetsByTagsResponse::class, FindPetsByTagsResponse.serializer()) - - } - } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt similarity index 70% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/StoreApi.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt index 8ca30e8ca3a3..34319c6d10fb 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt @@ -1,40 +1,40 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData -import kotlinx.serialization.UnstableDefault import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.serializer.KotlinxSerializer +import io.ktor.client.request.forms.FormPart import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor +import kotlinx.serialization.builtins.list +import kotlinx.serialization.builtins.serializer -class StoreApi @UseExperimental(UnstableDefault::class) constructor( +class StoreApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer ) : ApiClient(baseUrl, httpClientEngine, serializer) { - @UseExperimental(UnstableDefault::class) constructor( - baseUrl: kotlin.String = "http://petstore.swagger.io/v2", + baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Default + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) /** @@ -43,20 +43,23 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( * @param orderId ID of the order that needs to be deleted * @return void */ - suspend fun deleteOrder(orderId: kotlin.String): HttpResponse { - + suspend fun deleteOrder( + orderId: kotlin.String + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.DELETE, - "/store/order/{orderId}".replace("{" + "orderId" + "}", "$orderId"), + "/store/order/{orderId}".replace("orderId", "$orderId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -67,24 +70,24 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Returns pet inventories by status * Returns a map of status codes to quantities * @return kotlin.collections.Map */ @Suppress("UNCHECKED_CAST") - suspend fun getInventory(): HttpResponse> { - + suspend fun getInventory( + ): HttpResponse> { val localVariableAuthNames = listOf("api_key") val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, @@ -99,18 +102,16 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap().map { value } } - @Serializable private class GetInventoryResponse(val value: Map) { @Serializer(GetInventoryResponse::class) companion object : KSerializer { private val serializer: KSerializer> = (kotlin.String.serializer() to kotlin.Int.serializer()).map - override val descriptor = StringDescriptor.withName("GetInventoryResponse") - override fun serialize(encoder: Encoder, obj: GetInventoryResponse) = serializer.serialize(encoder, obj.value) + override val descriptor = PrimitiveDescriptor("GetInventoryResponse", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: GetInventoryResponse) = serializer.serialize(encoder, value.value) override fun deserialize(decoder: Decoder) = GetInventoryResponse(serializer.deserialize(decoder)) } } - /** * Find purchase order by ID * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions @@ -118,20 +119,23 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( * @return Order */ @Suppress("UNCHECKED_CAST") - suspend fun getOrderById(orderId: kotlin.Long): HttpResponse { - + suspend fun getOrderById( + orderId: kotlin.Long + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, - "/store/order/{orderId}".replace("{" + "orderId" + "}", "$orderId"), + "/store/order/{orderId}".replace("orderId", "$orderId"), query = localVariableQuery, headers = localVariableHeaders ) @@ -142,8 +146,6 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Place an order for a pet * @@ -151,15 +153,18 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( * @return Order */ @Suppress("UNCHECKED_CAST") - suspend fun placeOrder(body: Order): HttpResponse { - + suspend fun placeOrder( + body: Order + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = body - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, @@ -176,12 +181,4 @@ class StoreApi @UseExperimental(UnstableDefault::class) constructor( } - - - companion object { - internal fun setMappers(serializer: KotlinxSerializer) { - serializer.setMapper(GetInventoryResponse::class, GetInventoryResponse.serializer()) - - } - } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt similarity index 64% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/UserApi.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt index 88474dc9ef80..677d7a85e25e 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt @@ -1,40 +1,40 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData -import kotlinx.serialization.UnstableDefault import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.serializer.KotlinxSerializer +import io.ktor.client.request.forms.FormPart import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor +import kotlinx.serialization.builtins.list +import kotlinx.serialization.builtins.serializer -class UserApi @UseExperimental(UnstableDefault::class) constructor( +class UserApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer ) : ApiClient(baseUrl, httpClientEngine, serializer) { - @UseExperimental(UnstableDefault::class) constructor( - baseUrl: kotlin.String = "http://petstore.swagger.io/v2", + baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Default + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) /** @@ -43,15 +43,18 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( * @param body Created user object * @return void */ - suspend fun createUser(body: User): HttpResponse { - + suspend fun createUser( + body: User + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = body - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, @@ -68,22 +71,24 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( } - /** * Creates list of users with given input array * * @param body List of user object * @return void */ - suspend fun createUsersWithArrayInput(body: kotlin.collections.List): HttpResponse { - + suspend fun createUsersWithArrayInput( + body: kotlin.collections.List + ): HttpResponse { val localVariableAuthNames = listOf() - val localVariableBody = CreateUsersWithArrayInputRequest(body) + val localVariableBody = body?.let { CreateUsersWithArrayInputRequest(it) } - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, @@ -103,28 +108,33 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( private class CreateUsersWithArrayInputRequest(val value: List) { @Serializer(CreateUsersWithArrayInputRequest::class) companion object : KSerializer { - private val serializer: KSerializer> = User.serializer().list - override val descriptor = StringDescriptor.withName("CreateUsersWithArrayInputRequest") - override fun serialize(encoder: Encoder, obj: CreateUsersWithArrayInputRequest) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = CreateUsersWithArrayInputRequest(serializer.deserialize(decoder)) + private val serializer = User.serializer().list + override val descriptor = PrimitiveDescriptor("CreateUsersWithArrayInputRequest", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: CreateUsersWithArrayInputRequest) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = CreateUsersWithArrayInputRequest(serializer.deserialize(decoder)) } } - /** * Creates list of users with given input array * * @param body List of user object * @return void */ - suspend fun createUsersWithListInput(body: kotlin.collections.List): HttpResponse { - + suspend fun createUsersWithListInput( + body: kotlin.collections.List + ): HttpResponse { val localVariableAuthNames = listOf() - val localVariableBody = CreateUsersWithListInputRequest(body) + val localVariableBody = body?.let { CreateUsersWithListInputRequest(it) } - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.POST, @@ -144,33 +154,38 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( private class CreateUsersWithListInputRequest(val value: List) { @Serializer(CreateUsersWithListInputRequest::class) companion object : KSerializer { - private val serializer: KSerializer> = User.serializer().list - override val descriptor = StringDescriptor.withName("CreateUsersWithListInputRequest") - override fun serialize(encoder: Encoder, obj: CreateUsersWithListInputRequest) = serializer.serialize(encoder, obj.value) - override fun deserialize(decoder: Decoder) = CreateUsersWithListInputRequest(serializer.deserialize(decoder)) + private val serializer = User.serializer().list + override val descriptor = PrimitiveDescriptor("CreateUsersWithListInputRequest", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: CreateUsersWithListInputRequest) = + serializer.serialize(encoder, value.value) + + override fun deserialize(decoder: Decoder) = CreateUsersWithListInputRequest(serializer.deserialize(decoder)) } } - /** * Delete user * This can only be done by the logged in user. * @param username The name that needs to be deleted * @return void */ - suspend fun deleteUser(username: kotlin.String): HttpResponse { - + suspend fun deleteUser( + username: kotlin.String + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.DELETE, - "/user/{username}".replace("{" + "username" + "}", "$username"), + "/user/{username}".replace("username", "$username"), query = localVariableQuery, headers = localVariableHeaders ) @@ -181,8 +196,6 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Get user by user name * @@ -190,20 +203,23 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( * @return User */ @Suppress("UNCHECKED_CAST") - suspend fun getUserByName(username: kotlin.String): HttpResponse { - + suspend fun getUserByName( + username: kotlin.String + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, - "/user/{username}".replace("{" + "username" + "}", "$username"), + "/user/{username}".replace("username", "$username"), query = localVariableQuery, headers = localVariableHeaders ) @@ -214,8 +230,6 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Logs user into the system * @@ -224,18 +238,22 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( * @return kotlin.String */ @Suppress("UNCHECKED_CAST") - suspend fun loginUser(username: kotlin.String, password: kotlin.String): HttpResponse { - + suspend fun loginUser( + username: kotlin.String, + password: kotlin.String + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() - username?.apply { localVariableQuery["username"] = listOf("$username") } - password?.apply { localVariableQuery["password"] = listOf("$password") } + val localVariableQuery = mutableMapOf?>( + "username" to listOf("$username"), + "password" to listOf("$password") + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, @@ -250,23 +268,23 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Logs out current logged in user session * * @return void */ - suspend fun logoutUser(): HttpResponse { - + suspend fun logoutUser( + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.GET, @@ -281,8 +299,6 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( localVariableAuthNames ).wrap() } - - /** * Updated user * This can only be done by the logged in user. @@ -290,19 +306,23 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( * @param body Updated user object * @return void */ - suspend fun updateUser(username: kotlin.String, body: User): HttpResponse { - + suspend fun updateUser( + username: kotlin.String, + body: User + ): HttpResponse { val localVariableAuthNames = listOf() val localVariableBody = body - val localVariableQuery = mutableMapOf>() + val localVariableQuery = mutableMapOf?>( + ) - val localVariableHeaders = mutableMapOf() + val localVariableHeaders = mutableMapOf( + ) val localVariableConfig = RequestConfig( RequestMethod.PUT, - "/user/{username}".replace("{" + "username" + "}", "$username"), + "/user/{username}".replace("username", "$username"), query = localVariableQuery, headers = localVariableHeaders ) @@ -315,14 +335,4 @@ class UserApi @UseExperimental(UnstableDefault::class) constructor( } - - - companion object { - internal fun setMappers(serializer: KotlinxSerializer) { - - serializer.setMapper(CreateUsersWithArrayInputRequest::class, CreateUsersWithArrayInputRequest.serializer()) - serializer.setMapper(CreateUsersWithListInputRequest::class, CreateUsersWithListInputRequest.serializer()) - - } - } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/ApiKeyAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt similarity index 82% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/ApiKeyAuth.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt index 8bd8b59a8f82..5393e5bb286a 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/ApiKeyAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt @@ -4,7 +4,7 @@ class ApiKeyAuth(private val location: String, val paramName: String) : Authenti var apiKey: String? = null var apiKeyPrefix: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val key: String = apiKey ?: return val prefix: String? = apiKeyPrefix val value: String = if (prefix != null) "$prefix $key" else key diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/Authentication.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt similarity index 71% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/Authentication.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt index 2c5dfb4acc56..6abcf7c0a04c 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/Authentication.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt @@ -1,13 +1,11 @@ package org.openapitools.client.auth interface Authentication { - /** * Apply authentication settings to header and query params. * * @param query Query parameters. * @param headers Header parameters. */ - fun apply(query: MutableMap>, headers: MutableMap) - + fun apply(query: MutableMap?>, headers: MutableMap) } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBasicAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt similarity index 80% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBasicAuth.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt index 5f0a52c19515..c1ab3b59353e 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBasicAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt @@ -8,7 +8,7 @@ class HttpBasicAuth : Authentication { var password: String? = null @InternalAPI - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { if (username == null && password == null) return val str = (username ?: "") + ":" + (password ?: "") val auth = str.encodeBase64() diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBearerAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt similarity index 81% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBearerAuth.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt index a6fb285af5c3..2a0df092dbf2 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/HttpBearerAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt @@ -3,7 +3,7 @@ package org.openapitools.client.auth class HttpBearerAuth(private val scheme: String?) : Authentication { var bearerToken: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val token: String = bearerToken ?: return headers["Authorization"] = (if (scheme != null) upperCaseBearer(scheme)!! + " " else "") + token } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/OAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt similarity index 67% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/OAuth.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt index 08b289c29442..1c156c538ce2 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/auth/OAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt @@ -3,7 +3,7 @@ package org.openapitools.client.auth class OAuth : Authentication { var accessToken: String? = null - override fun apply(query: MutableMap>, headers: MutableMap) { + override fun apply(query: MutableMap?>, headers: MutableMap) { val token: String = accessToken ?: return headers["Authorization"] = "Bearer $token" } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt similarity index 100% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt similarity index 60% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt index fe8434be2100..ef2d89ea9d55 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt @@ -2,74 +2,49 @@ package org.openapitools.client.infrastructure import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig -import io.ktor.client.call.call import io.ktor.client.engine.HttpClientEngine import io.ktor.client.features.json.JsonFeature -import io.ktor.client.features.json.JsonSerializer import io.ktor.client.features.json.serializer.KotlinxSerializer -import io.ktor.client.request.accept import io.ktor.client.request.forms.FormDataContent import io.ktor.client.request.forms.MultiPartFormDataContent import io.ktor.client.request.header import io.ktor.client.request.parameter -import io.ktor.client.response.HttpResponse +import io.ktor.client.request.request +import io.ktor.client.statement.HttpResponse import io.ktor.client.utils.EmptyContent import io.ktor.http.* import io.ktor.http.content.OutgoingContent import io.ktor.http.content.PartData -import kotlinx.serialization.UnstableDefault import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration -import org.openapitools.client.apis.* -import org.openapitools.client.models.* import org.openapitools.client.auth.* open class ApiClient( private val baseUrl: String, httpClientEngine: HttpClientEngine?, - serializer: KotlinxSerializer) { + private val serializer: KotlinxSerializer +) { - @UseExperimental(UnstableDefault::class) constructor( baseUrl: String, httpClientEngine: HttpClientEngine?, - jsonConfiguration: JsonConfiguration) : - this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - - private val serializer: JsonSerializer by lazy { - serializer.apply { setMappers(this) }.ignoreOutgoingContent() - } + jsonConfiguration: JsonConfiguration + ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) private val client: HttpClient by lazy { val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClient.serializer } val clientConfig: (HttpClientConfig<*>) -> Unit = { it.install(JsonFeature, jsonConfig) } httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) } - private val authentications: kotlin.collections.Map by lazy { - mapOf( + private val authentications: Map = mapOf( "api_key" to ApiKeyAuth("header", "api_key"), - "petstore_auth" to OAuth()) - } + "petstore_auth" to OAuth() + ) + companion object { protected val UNSAFE_HEADERS = listOf(HttpHeaders.ContentType) - - private fun setMappers(serializer: KotlinxSerializer) { - - PetApi.setMappers(serializer) - - StoreApi.setMappers(serializer) - - UserApi.setMappers(serializer) - - serializer.setMapper(org.openapitools.client.models.ApiResponse::class, org.openapitools.client.models.ApiResponse.serializer()) - serializer.setMapper(org.openapitools.client.models.Category::class, org.openapitools.client.models.Category.serializer()) - serializer.setMapper(org.openapitools.client.models.Order::class, org.openapitools.client.models.Order.serializer()) - serializer.setMapper(org.openapitools.client.models.Pet::class, org.openapitools.client.models.Pet.serializer()) - serializer.setMapper(org.openapitools.client.models.Tag::class, org.openapitools.client.models.Tag.serializer()) - serializer.setMapper(org.openapitools.client.models.User::class, org.openapitools.client.models.User.serializer()) - } } /** @@ -78,7 +53,7 @@ open class ApiClient( * @param username Username */ 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") auth.username = username } @@ -89,7 +64,7 @@ open class ApiClient( * @param password Password */ 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") auth.password = password } @@ -101,7 +76,7 @@ open class ApiClient( * @param paramName The name of the API key parameter, or null or set the first key. */ 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") auth.apiKey = apiKey } @@ -113,7 +88,7 @@ open class ApiClient( * @param paramName The name of the API key parameter, or null or set the first key. */ 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") auth.apiKeyPrefix = apiKeyPrefix } @@ -124,7 +99,7 @@ open class ApiClient( * @param accessToken Access token */ 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") auth.accessToken = accessToken } @@ -135,36 +110,36 @@ open class ApiClient( * @param bearerToken The bearer token. */ 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") auth.bearerToken = bearerToken } - protected suspend fun multipartFormRequest(requestConfig: RequestConfig, body: kotlin.collections.List?, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun multipartFormRequest(requestConfig: RequestConfig, body: List?, authNames: List): HttpResponse { return request(requestConfig, MultiPartFormDataContent(body ?: listOf()), authNames) } - protected suspend fun urlEncodedFormRequest(requestConfig: RequestConfig, body: Parameters?, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun urlEncodedFormRequest(requestConfig: RequestConfig, body: Parameters?, authNames: List): HttpResponse { return request(requestConfig, FormDataContent(body ?: Parameters.Empty), authNames) } - protected suspend fun jsonRequest(requestConfig: RequestConfig, body: Any? = null, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun jsonRequest(requestConfig: RequestConfig, body: Any? = null, authNames: List): HttpResponse { val contentType = (requestConfig.headers[HttpHeaders.ContentType]?.let { ContentType.parse(it) } ?: ContentType.Application.Json) return if (body != null) request(requestConfig, serializer.write(body, contentType), authNames) else request(requestConfig, authNames = authNames) } - protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { + protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: List): HttpResponse { requestConfig.updateForAuth(authNames) val headers = requestConfig.headers - return client.call { + return client.request { this.url { this.takeFrom(URLBuilder(baseUrl)) appendPath(requestConfig.path.trimStart('/').split('/')) requestConfig.query.forEach { query -> - query.value.forEach { value -> + query.value?.forEach { value -> parameter(query.key, value) } } @@ -174,17 +149,17 @@ open class ApiClient( if (requestConfig.method in listOf(RequestMethod.PUT, RequestMethod.POST, RequestMethod.PATCH)) this.body = body - }.response + } } - private fun RequestConfig.updateForAuth(authNames: kotlin.collections.List) { + private fun RequestConfig.updateForAuth(authNames: List) { for (authName in authNames) { - val auth = authentications?.get(authName) ?: throw Exception("Authentication undefined: $authName") + val auth = authentications[authName] ?: throw Exception("Authentication undefined: $authName") auth.apply(query, headers) } } - private fun URLBuilder.appendPath(components: kotlin.collections.List): URLBuilder = apply { + private fun URLBuilder.appendPath(components: List): URLBuilder = apply { encodedPath = encodedPath.trimEnd('/') + components.joinToString("/", prefix = "/") { it.encodeURLQueryComponent() } } @@ -199,13 +174,3 @@ open class ApiClient( RequestMethod.OPTIONS -> HttpMethod.Options } } - -// https://github.com/ktorio/ktor/issues/851 -private fun JsonSerializer.ignoreOutgoingContent() = IgnoreOutgoingContentJsonSerializer(this) - -private class IgnoreOutgoingContentJsonSerializer(private val delegate: JsonSerializer) : JsonSerializer by delegate { - override fun write(data: Any): OutgoingContent { - if (data is OutgoingContent) return data - return delegate.write(data) - } -} diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Base64ByteArray.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt similarity index 75% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Base64ByteArray.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt index 4bc1197cf00d..6906d5a323a8 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Base64ByteArray.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt @@ -1,14 +1,13 @@ package org.openapitools.client.infrastructure import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor @Serializable class Base64ByteArray(val value: ByteArray) { @Serializer(Base64ByteArray::class) companion object : KSerializer { - override val descriptor = StringDescriptor.withName("Base64ByteArray") - override fun serialize(encoder: Encoder, obj: Base64ByteArray) = encoder.encodeString(obj.value.encodeBase64()) + override val descriptor = PrimitiveDescriptor("Base64ByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: Base64ByteArray) = encoder.encodeString(value.value.encodeBase64()) override fun deserialize(decoder: Decoder) = Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Bytes.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt similarity index 96% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Bytes.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt index 8a222416cf2d..43295604da7b 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/Bytes.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt @@ -1,6 +1,6 @@ package org.openapitools.client.infrastructure -import kotlinx.io.core.* +import io.ktor.utils.io.core.* import kotlin.experimental.and private val digits = "0123456789abcdef".toCharArray() @@ -14,7 +14,7 @@ private fun ByteArray.clearFrom(from: Int) = (from until size).forEach { this[it private fun Int.toBase64(): Char = BASE64_ALPHABET[this] private fun Byte.fromBase64(): Byte = BASE64_INVERSE_ALPHABET[toInt() and 0xff].toByte() and BASE64_MASK internal fun ByteArray.encodeBase64(): String = buildPacket { writeFully(this@encodeBase64) }.encodeBase64() -internal fun String.decodeBase64Bytes(): ByteArray = buildPacket { writeStringUtf8(dropLastWhile { it == BASE64_PAD }) }.decodeBase64Bytes().readBytes() +internal fun String.decodeBase64Bytes(): ByteArray = buildPacket { writeText(dropLastWhile { it == BASE64_PAD }) }.decodeBase64Bytes().readBytes() /** * Encode [bytes] as a HEX string with no spaces, newlines and `0x` prefixes. diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/HttpResponse.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/HttpResponse.kt similarity index 54% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/HttpResponse.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/HttpResponse.kt index c457eb4bce0b..2be6e02070f6 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/HttpResponse.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/HttpResponse.kt @@ -4,8 +4,9 @@ import io.ktor.client.call.TypeInfo import io.ktor.client.call.typeInfo import io.ktor.http.Headers import io.ktor.http.isSuccess +import io.ktor.client.statement.HttpResponse as KtorHttpResponse -open class HttpResponse(val response: io.ktor.client.response.HttpResponse, val provider: BodyProvider) { +open class HttpResponse(val response: KtorHttpResponse, val provider: BodyProvider) { val status: Int = response.status.value val success: Boolean = response.status.isSuccess() val headers: Map> = response.headers.mapEntries() @@ -22,29 +23,30 @@ open class HttpResponse(val response: io.ktor.client.response.HttpRespo } interface BodyProvider { - suspend fun body(response: io.ktor.client.response.HttpResponse): T - suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V + suspend fun body(response: KtorHttpResponse): T + suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V } class TypedBodyProvider(private val type: TypeInfo) : BodyProvider { @Suppress("UNCHECKED_CAST") - override suspend fun body(response: io.ktor.client.response.HttpResponse): T = - response.call.receive(type) as T + override suspend fun body(response: KtorHttpResponse): T = + response.call.receive(type) as T @Suppress("UNCHECKED_CAST") - override suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V = - response.call.receive(type) as V + override suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V = + response.call.receive(type) as V } -class MappedBodyProvider(private val provider: BodyProvider, private val block: S.() -> T) : BodyProvider { - override suspend fun body(response: io.ktor.client.response.HttpResponse): T = - block(provider.body(response)) +class MappedBodyProvider(private val provider: BodyProvider, private val block: S.() -> T) : + BodyProvider { + override suspend fun body(response: KtorHttpResponse): T = + block(provider.body(response)) - override suspend fun typedBody(response: io.ktor.client.response.HttpResponse, type: TypeInfo): V = - provider.typedBody(response, type) + override suspend fun typedBody(response: KtorHttpResponse, type: TypeInfo): V = + provider.typedBody(response, type) } -inline fun io.ktor.client.response.HttpResponse.wrap(): HttpResponse = +inline fun KtorHttpResponse.wrap(): HttpResponse = HttpResponse(this, TypedBodyProvider(typeInfo())) fun HttpResponse.map(block: T.() -> V): HttpResponse = diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/OctetByteArray.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt similarity index 75% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/OctetByteArray.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt index 735e4e6e3f66..2ef5640587a2 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/OctetByteArray.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt @@ -1,14 +1,13 @@ package org.openapitools.client.infrastructure import kotlinx.serialization.* -import kotlinx.serialization.internal.StringDescriptor @Serializable class OctetByteArray(val value: ByteArray) { @Serializer(OctetByteArray::class) companion object : KSerializer { - override val descriptor = StringDescriptor.withName("OctetByteArray") - override fun serialize(encoder: Encoder, obj: OctetByteArray) = encoder.encodeString(hex(obj.value)) + override val descriptor = PrimitiveDescriptor("OctetByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: OctetByteArray) = encoder.encodeString(hex(value.value)) override fun deserialize(decoder: Decoder) = OctetByteArray(hex(decoder.decodeString())) } diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt similarity index 77% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt index 9c22257e223a..7f1ca724fa9f 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt @@ -11,6 +11,6 @@ package org.openapitools.client.infrastructure data class RequestConfig( val method: RequestMethod, val path: String, - val headers: MutableMap = mutableMapOf(), - val query: MutableMap> = mutableMapOf() -) \ No newline at end of file + val headers: MutableMap = mutableMapOf(), + val query: MutableMap?> = mutableMapOf() +) diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestMethod.kt similarity index 100% rename from samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestMethod.kt diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt new file mode 100644 index 000000000000..b3003f6e1604 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt @@ -0,0 +1,34 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * Describes the result of uploading an image resource + * + * @param code + * @param type + * @param message + */ +@Serializable +data class ApiResponse( + @SerialName(value = "code") + val code: kotlin.Int? = null, + @SerialName(value = "type") + val type: kotlin.String? = null, + @SerialName(value = "message") + val message: kotlin.String? = null +) + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt new file mode 100644 index 000000000000..429dd6646ee6 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt @@ -0,0 +1,31 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * A category for a pet + * + * @param id + * @param name + */ +@Serializable +data class Category( + @SerialName(value = "id") + val id: kotlin.Long? = null, + @SerialName(value = "name") + val name: kotlin.String? = null +) + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt new file mode 100644 index 000000000000..13eaf0db4ae0 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt @@ -0,0 +1,61 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * An order for a pets from the pet store + * + * @param id + * @param petId + * @param quantity + * @param shipDate + * @param status Order Status + * @param complete + */ +@Serializable +data class Order( + @SerialName(value = "id") + val id: kotlin.Long? = null, + @SerialName(value = "petId") + val petId: kotlin.Long? = null, + @SerialName(value = "quantity") + val quantity: kotlin.Int? = null, + @SerialName(value = "shipDate") + val shipDate: kotlin.String? = null, + /** + * Order Status + */ + @SerialName(value = "status") + val status: Order.Status? = null, + @SerialName(value = "complete") + val complete: kotlin.Boolean? = null +) { + + /** + * Order Status + * + * Values: placed,approved,delivered + */ + enum class Status(val value: kotlin.String){ + @Json(name = "placed") placed("placed"), + @SerialName(value = "placed") placed("placed"), + @Json(name = "approved") approved("approved"), + @SerialName(value = "approved") approved("approved"), + @Json(name = "delivered") delivered("delivered"); + @SerialName(value = "delivered") delivered("delivered"); + } +} + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt new file mode 100644 index 000000000000..aa88e80b6ac1 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt @@ -0,0 +1,65 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + +import org.openapitools.client.models.Category +import org.openapitools.client.models.Tag + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * A pet for sale in the pet store + * + * @param name + * @param photoUrls + * @param id + * @param category + * @param tags + * @param status pet status in the store + */ +@Serializable +data class Pet( + @SerialName(value = "name") + @Required + val name: kotlin.String, + @SerialName(value = "photoUrls") + @Required + val photoUrls: kotlin.collections.List, + @SerialName(value = "id") + val id: kotlin.Long? = null, + @SerialName(value = "category") + val category: Category? = null, + @SerialName(value = "tags") + val tags: kotlin.collections.List? = null, + /** + * pet status in the store + */ + @SerialName(value = "status") + val status: Pet.Status? = null +) { + + /** + * pet status in the store + * + * Values: available,pending,sold + */ + enum class Status(val value: kotlin.String){ + @Json(name = "available") available("available"), + @SerialName(value = "available") available("available"), + @Json(name = "pending") pending("pending"), + @SerialName(value = "pending") pending("pending"), + @Json(name = "sold") sold("sold"); + @SerialName(value = "sold") sold("sold"); + } +} + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt new file mode 100644 index 000000000000..07f3f3751670 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt @@ -0,0 +1,31 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * A tag for a pet + * + * @param id + * @param name + */ +@Serializable +data class Tag( + @SerialName(value = "id") + val id: kotlin.Long? = null, + @SerialName(value = "name") + val name: kotlin.String? = null +) + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt new file mode 100644 index 000000000000..fe47feb98a4a --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt @@ -0,0 +1,52 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.models + + +import kotlinx.serialization.* +import kotlin.collections.* + +/** + * A User who is purchasing from the pet store + * + * @param id + * @param username + * @param firstName + * @param lastName + * @param email + * @param password + * @param phone + * @param userStatus User Status + */ +@Serializable +data class User( + @SerialName(value = "id") + val id: kotlin.Long? = null, + @SerialName(value = "username") + val username: kotlin.String? = null, + @SerialName(value = "firstName") + val firstName: kotlin.String? = null, + @SerialName(value = "lastName") + val lastName: kotlin.String? = null, + @SerialName(value = "email") + val email: kotlin.String? = null, + @SerialName(value = "password") + val password: kotlin.String? = null, + @SerialName(value = "phone") + val phone: kotlin.String? = null, + /** + * User Status + */ + @SerialName(value = "userStatus") + val userStatus: kotlin.Int? = null +) + diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/test/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/common/test/util/Coroutine.kt new file mode 100644 index 000000000000..841397635c1b --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/test/util/Coroutine.kt @@ -0,0 +1,23 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package util + +import kotlinx.coroutines.CoroutineScope + +/** +* Block the current thread until execution of the given coroutine is complete. +* +* @param block The coroutine code. +* @return The result of the coroutine. +*/ +internal expect fun runTest(block: suspend CoroutineScope.() -> T): T diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/ApiResponse.kt deleted file mode 100644 index a035628a8f93..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/ApiResponse.kt +++ /dev/null @@ -1,30 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * Describes the result of uploading an image resource - * @param code - * @param type - * @param message - */ -@Serializable -data class ApiResponse ( - @SerialName(value = "code") val code: kotlin.Int? = null, - @SerialName(value = "type") val type: kotlin.String? = null, - @SerialName(value = "message") val message: kotlin.String? = null -) - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Category.kt deleted file mode 100644 index d5f9a45fd4de..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Category.kt +++ /dev/null @@ -1,28 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * A category for a pet - * @param id - * @param name - */ -@Serializable -data class Category ( - @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "name") val name: kotlin.String? = null -) - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Order.kt deleted file mode 100644 index f1bd6ce4d0b8..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Order.kt +++ /dev/null @@ -1,51 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * An order for a pets from the pet store - * @param id - * @param petId - * @param quantity - * @param shipDate - * @param status Order Status - * @param complete - */ -@Serializable -data class Order ( - @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "petId") val petId: kotlin.Long? = null, - @SerialName(value = "quantity") val quantity: kotlin.Int? = null, - @SerialName(value = "shipDate") val shipDate: kotlin.String? = null, - /* Order Status */ - @SerialName(value = "status") val status: Order.Status? = null, - @SerialName(value = "complete") val complete: kotlin.Boolean? = null -) { - - /** - * Order Status - * Values: placed,approved,delivered - */ - @Serializable(with = Status.Serializer::class) - enum class Status(val value: kotlin.String){ - placed("placed"), - approved("approved"), - delivered("delivered"); - - object Serializer : CommonEnumSerializer("Status", values(), values().map { it.value.toString() }.toTypedArray()) - } -} - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Pet.kt deleted file mode 100644 index 473cbaa959ac..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Pet.kt +++ /dev/null @@ -1,53 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - -import org.openapitools.client.models.Category -import org.openapitools.client.models.Tag - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * A pet for sale in the pet store - * @param name - * @param photoUrls - * @param id - * @param category - * @param tags - * @param status pet status in the store - */ -@Serializable -data class Pet ( - @SerialName(value = "name") @Required val name: kotlin.String, - @SerialName(value = "photoUrls") @Required val photoUrls: kotlin.collections.List, - @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "category") val category: Category? = null, - @SerialName(value = "tags") val tags: kotlin.collections.List? = null, - /* pet status in the store */ - @SerialName(value = "status") val status: Pet.Status? = null -) { - - /** - * pet status in the store - * Values: available,pending,sold - */ - @Serializable(with = Status.Serializer::class) - enum class Status(val value: kotlin.String){ - available("available"), - pending("pending"), - sold("sold"); - - object Serializer : CommonEnumSerializer("Status", values(), values().map { it.value.toString() }.toTypedArray()) - } -} - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Tag.kt deleted file mode 100644 index 6116e50d3f92..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/Tag.kt +++ /dev/null @@ -1,28 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * A tag for a pet - * @param id - * @param name - */ -@Serializable -data class Tag ( - @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "name") val name: kotlin.String? = null -) - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/User.kt deleted file mode 100644 index 97b53a049c1d..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/models/User.kt +++ /dev/null @@ -1,41 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.client.models - - -import kotlinx.serialization.* -import kotlinx.serialization.internal.CommonEnumSerializer - -/** - * A User who is purchasing from the pet store - * @param id - * @param username - * @param firstName - * @param lastName - * @param email - * @param password - * @param phone - * @param userStatus User Status - */ -@Serializable -data class User ( - @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "username") val username: kotlin.String? = null, - @SerialName(value = "firstName") val firstName: kotlin.String? = null, - @SerialName(value = "lastName") val lastName: kotlin.String? = null, - @SerialName(value = "email") val email: kotlin.String? = null, - @SerialName(value = "password") val password: kotlin.String? = null, - @SerialName(value = "phone") val phone: kotlin.String? = null, - /* User Status */ - @SerialName(value = "userStatus") val userStatus: kotlin.Int? = null -) - diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonTest/kotlin/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/commonTest/kotlin/util/Coroutine.kt deleted file mode 100644 index fcff288bfef6..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/commonTest/kotlin/util/Coroutine.kt +++ /dev/null @@ -1,23 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ - -package util - -import kotlinx.coroutines.CoroutineScope - -/** -* Block the current thread until execution of the given coroutine is complete. -* -* @param block The coroutine code. -* @return The result of the coroutine. -*/ -internal expect fun runTest(block: suspend CoroutineScope.() -> T): T diff --git a/samples/client/petstore/kotlin-multiplatform/src/ios/test/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/ios/test/util/Coroutine.kt new file mode 100644 index 000000000000..d13344446fbd --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/ios/test/util/Coroutine.kt @@ -0,0 +1,18 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package util + +import kotlinx.coroutines.CoroutineScope +import kotlin.coroutines.EmptyCoroutineContext + +internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = kotlinx.coroutines.runBlocking(EmptyCoroutineContext, block) diff --git a/samples/client/petstore/kotlin-multiplatform/src/iosTest/kotlin/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/iosTest/kotlin/util/Coroutine.kt deleted file mode 100644 index b8b36f3f7596..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/iosTest/kotlin/util/Coroutine.kt +++ /dev/null @@ -1,18 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ - -package util - -import kotlinx.coroutines.CoroutineScope -import kotlin.coroutines.EmptyCoroutineContext - -internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = kotlinx.coroutines.runBlocking(EmptyCoroutineContext, block) diff --git a/samples/client/petstore/kotlin-multiplatform/src/jsTest/kotlin/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/js/test/util/Coroutine.kt similarity index 100% rename from samples/client/petstore/kotlin-multiplatform/src/jsTest/kotlin/util/Coroutine.kt rename to samples/client/petstore/kotlin-multiplatform/src/js/test/util/Coroutine.kt diff --git a/samples/client/petstore/kotlin-multiplatform/src/jvm/test/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/jvm/test/util/Coroutine.kt new file mode 100644 index 000000000000..0976adca3ca6 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/jvm/test/util/Coroutine.kt @@ -0,0 +1,19 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package util + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.runBlocking +import kotlin.coroutines.EmptyCoroutineContext + +internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = runBlocking(EmptyCoroutineContext, block) diff --git a/samples/client/petstore/kotlin-multiplatform/src/jvmTest/kotlin/util/Coroutine.kt b/samples/client/petstore/kotlin-multiplatform/src/jvmTest/kotlin/util/Coroutine.kt deleted file mode 100644 index b8b36f3f7596..000000000000 --- a/samples/client/petstore/kotlin-multiplatform/src/jvmTest/kotlin/util/Coroutine.kt +++ /dev/null @@ -1,18 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ - -package util - -import kotlinx.coroutines.CoroutineScope -import kotlin.coroutines.EmptyCoroutineContext - -internal actual fun runTest(block: suspend CoroutineScope.() -> T): T = kotlinx.coroutines.runBlocking(EmptyCoroutineContext, block) diff --git a/samples/client/petstore/kotlin-nonpublic/README.md b/samples/client/petstore/kotlin-nonpublic/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-nonpublic/README.md +++ b/samples/client/petstore/kotlin-nonpublic/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-nonpublic/docs/Order.md b/samples/client/petstore/kotlin-nonpublic/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-nonpublic/docs/Order.md +++ b/samples/client/petstore/kotlin-nonpublic/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-nonpublic/docs/Pet.md b/samples/client/petstore/kotlin-nonpublic/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-nonpublic/docs/Pet.md +++ b/samples/client/petstore/kotlin-nonpublic/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-nonpublic/settings.gradle b/samples/client/petstore/kotlin-nonpublic/settings.gradle index b6d700d5a984..b12e60cec24c 100644 --- a/samples/client/petstore/kotlin-nonpublic/settings.gradle +++ b/samples/client/petstore/kotlin-nonpublic/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-nonpublic' \ No newline at end of file +rootProject.name = 'kotlin-petstore-nonpublic' diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 5e930e963956..626ea070711f 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 4f8898adf9b3..56e7b38aa6ff 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 725b36b01060..c7db5a7be870 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index a695278dfa3c..87707bde443c 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -internal data class ApiResponse ( +internal data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt index 376994a9b250..2a9f9706f426 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -internal data class Category ( +internal data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt index a943b97c1ea3..53124070fe65 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -internal data class Order ( +internal data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ internal enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt index 544fab20f5a7..e93a4f71be59 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -internal data class Pet ( +internal data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ internal enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt index d9b84e93eafd..e0bc38646b7b 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -internal data class Tag ( +internal data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt index e0e821cd7e38..3d19f0f6ceff 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -internal data class User ( +internal data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-nullable/README.md b/samples/client/petstore/kotlin-nullable/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-nullable/README.md +++ b/samples/client/petstore/kotlin-nullable/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-nullable/docs/Order.md b/samples/client/petstore/kotlin-nullable/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-nullable/docs/Order.md +++ b/samples/client/petstore/kotlin-nullable/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-nullable/docs/Pet.md b/samples/client/petstore/kotlin-nullable/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-nullable/docs/Pet.md +++ b/samples/client/petstore/kotlin-nullable/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-nullable/settings.gradle b/samples/client/petstore/kotlin-nullable/settings.gradle index 1022b496fedf..229267927ecf 100644 --- a/samples/client/petstore/kotlin-nullable/settings.gradle +++ b/samples/client/petstore/kotlin-nullable/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-nullable' \ No newline at end of file +rootProject.name = 'kotlin-petstore-nullable' diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 4b9faa2a2c46..900a6aff8e73 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index b9dd7b38f59b..bc3501e75745 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 2ae5998489dd..78829641794e 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 7d40c8efbc2f..6c517e812a31 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,33 +1,38 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt index ceb0fbc8fe60..9e3a630aff28 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt index ed8f8b13a43b..cc54ab1c2a65 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -25,19 +27,27 @@ import java.io.Serializable * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) : Serializable { companion object { @@ -45,10 +55,10 @@ data class Order ( } /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt index 105f485f021d..2268e104bd1d 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category @@ -16,9 +16,11 @@ import org.openapitools.client.models.Tag import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -27,19 +29,25 @@ import java.io.Serializable * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) : Serializable { companion object { @@ -47,10 +55,10 @@ data class Pet ( } /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt index 944b1cd0a141..7b25720b83bd 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt index 9697f07d5bf8..e4732851b0c3 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -27,23 +29,33 @@ import java.io.Serializable * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-okhttp3/README.md b/samples/client/petstore/kotlin-okhttp3/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-okhttp3/README.md +++ b/samples/client/petstore/kotlin-okhttp3/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-okhttp3/docs/Order.md b/samples/client/petstore/kotlin-okhttp3/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-okhttp3/docs/Order.md +++ b/samples/client/petstore/kotlin-okhttp3/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-okhttp3/docs/Pet.md b/samples/client/petstore/kotlin-okhttp3/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-okhttp3/docs/Pet.md +++ b/samples/client/petstore/kotlin-okhttp3/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-okhttp3/settings.gradle b/samples/client/petstore/kotlin-okhttp3/settings.gradle index a18186278ecb..92b4e7026195 100644 --- a/samples/client/petstore/kotlin-okhttp3/settings.gradle +++ b/samples/client/petstore/kotlin-okhttp3/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-okhttp3' \ No newline at end of file +rootProject.name = 'kotlin-petstore-okhttp3' diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..36db4bcb996f 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..653069f5198b 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt index a66c335904e7..bf6fb8a4d2cc 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt index a3df06cb6eb3..e800cb5f94f6 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..f8b04268ae3d 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..a8efdaeb5fe0 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/README.md b/samples/client/petstore/kotlin-retrofit2-rx3/README.md index f374ed0b99f3..a56262d04c2a 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/README.md +++ b/samples/client/petstore/kotlin-retrofit2-rx3/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/docs/Order.md b/samples/client/petstore/kotlin-retrofit2-rx3/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/docs/Order.md +++ b/samples/client/petstore/kotlin-retrofit2-rx3/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/docs/Pet.md b/samples/client/petstore/kotlin-retrofit2-rx3/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/docs/Pet.md +++ b/samples/client/petstore/kotlin-retrofit2-rx3/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/settings.gradle b/samples/client/petstore/kotlin-retrofit2-rx3/settings.gradle index df63a0a713ce..b24c7c5b8e4d 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/settings.gradle +++ b/samples/client/petstore/kotlin-retrofit2-rx3/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-retrofit2-rx3' \ No newline at end of file +rootProject.name = 'kotlin-petstore-retrofit2-rx3' diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..36db4bcb996f 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..653069f5198b 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt index a66c335904e7..bf6fb8a4d2cc 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt index a3df06cb6eb3..e800cb5f94f6 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..f8b04268ae3d 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..a8efdaeb5fe0 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/README.md b/samples/client/petstore/kotlin-retrofit2/README.md index f374ed0b99f3..a56262d04c2a 100644 --- a/samples/client/petstore/kotlin-retrofit2/README.md +++ b/samples/client/petstore/kotlin-retrofit2/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-retrofit2/docs/Order.md b/samples/client/petstore/kotlin-retrofit2/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin-retrofit2/docs/Order.md +++ b/samples/client/petstore/kotlin-retrofit2/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-retrofit2/docs/Pet.md b/samples/client/petstore/kotlin-retrofit2/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-retrofit2/docs/Pet.md +++ b/samples/client/petstore/kotlin-retrofit2/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-retrofit2/settings.gradle b/samples/client/petstore/kotlin-retrofit2/settings.gradle index 24c556e079c1..01c60542d300 100644 --- a/samples/client/petstore/kotlin-retrofit2/settings.gradle +++ b/samples/client/petstore/kotlin-retrofit2/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-retrofit2' \ No newline at end of file +rootProject.name = 'kotlin-petstore-retrofit2' diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..36db4bcb996f 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..653069f5198b 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt index a66c335904e7..bf6fb8a4d2cc 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt index a3df06cb6eb3..e800cb5f94f6 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..f8b04268ae3d 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..a8efdaeb5fe0 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-string/README.md b/samples/client/petstore/kotlin-string/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-string/README.md +++ b/samples/client/petstore/kotlin-string/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-string/docs/Order.md b/samples/client/petstore/kotlin-string/docs/Order.md index 4683c14c1cbe..25e712e47289 100644 --- a/samples/client/petstore/kotlin-string/docs/Order.md +++ b/samples/client/petstore/kotlin-string/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-string/docs/Pet.md b/samples/client/petstore/kotlin-string/docs/Pet.md index 73963abeb042..9d2211c363fc 100644 --- a/samples/client/petstore/kotlin-string/docs/Pet.md +++ b/samples/client/petstore/kotlin-string/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-string/settings.gradle b/samples/client/petstore/kotlin-string/settings.gradle index 9699edc87133..9742263a6a20 100644 --- a/samples/client/petstore/kotlin-string/settings.gradle +++ b/samples/client/petstore/kotlin-string/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-string' \ No newline at end of file +rootProject.name = 'kotlin-petstore-string' diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c95dd04f915e..bdd47b48d453 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 7d40c8efbc2f..6c517e812a31 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,33 +1,38 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt index ceb0fbc8fe60..9e3a630aff28 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt index ec768d1acefd..76b50c94e985 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -25,19 +27,27 @@ import java.io.Serializable * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: kotlin.String? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) : Serializable { companion object { @@ -45,10 +55,10 @@ data class Order ( } /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index 66667bf07cd1..8e5fb9696c12 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category @@ -16,9 +16,11 @@ import org.openapitools.client.models.Tag import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param id * @param category * @param name @@ -27,19 +29,25 @@ import java.io.Serializable * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) : Serializable { companion object { @@ -47,10 +55,10 @@ data class Pet ( } /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt index 944b1cd0a141..7b25720b83bd 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt index 9697f07d5bf8..e4732851b0c3 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -27,23 +29,33 @@ import java.io.Serializable * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-threetenbp/README.md b/samples/client/petstore/kotlin-threetenbp/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin-threetenbp/README.md +++ b/samples/client/petstore/kotlin-threetenbp/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin-threetenbp/docs/Order.md b/samples/client/petstore/kotlin-threetenbp/docs/Order.md index 776e0ddc2f02..a7c1d9ae6bcf 100644 --- a/samples/client/petstore/kotlin-threetenbp/docs/Order.md +++ b/samples/client/petstore/kotlin-threetenbp/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-threetenbp/docs/Pet.md b/samples/client/petstore/kotlin-threetenbp/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin-threetenbp/docs/Pet.md +++ b/samples/client/petstore/kotlin-threetenbp/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin-threetenbp/settings.gradle b/samples/client/petstore/kotlin-threetenbp/settings.gradle index 1f071e0d3ca6..307a3980c2ef 100644 --- a/samples/client/petstore/kotlin-threetenbp/settings.gradle +++ b/samples/client/petstore/kotlin-threetenbp/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-threetenbp' \ No newline at end of file +rootProject.name = 'kotlin-petstore-threetenbp' diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..36db4bcb996f 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,32 +1,37 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..653069f5198b 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt index 300f94d8545f..c6dc56633d58 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -24,27 +26,35 @@ import com.squareup.moshi.Json * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: org.threeten.bp.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) { /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt index a3df06cb6eb3..e800cb5f94f6 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,23 +1,25 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -26,27 +28,33 @@ import com.squareup.moshi.Json * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) { /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..f8b04268ae3d 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,29 +1,33 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..a8efdaeb5fe0 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,21 +1,23 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -26,23 +28,33 @@ import com.squareup.moshi.Json * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin/README.md b/samples/client/petstore/kotlin/README.md index 8166d4aadbac..492b00fc1d80 100644 --- a/samples/client/petstore/kotlin/README.md +++ b/samples/client/petstore/kotlin/README.md @@ -28,7 +28,7 @@ This runs all tests and packages the library. * Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. * Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets. - + ## Documentation for API Endpoints All URIs are relative to *http://petstore.swagger.io/v2* @@ -57,7 +57,7 @@ Class | Method | HTTP request | Description *UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - + ## Documentation for Models - [org.openapitools.client.models.ApiResponse](docs/ApiResponse.md) @@ -68,17 +68,17 @@ Class | Method | HTTP request | Description - [org.openapitools.client.models.User](docs/User.md) - + ## Documentation for Authorization - + ### api_key - **Type**: API key - **API key parameter name**: api_key - **Location**: HTTP header - + ### petstore_auth - **Type**: OAuth diff --git a/samples/client/petstore/kotlin/docs/Order.md b/samples/client/petstore/kotlin/docs/Order.md index 5112f08958d5..5044b96bb06e 100644 --- a/samples/client/petstore/kotlin/docs/Order.md +++ b/samples/client/petstore/kotlin/docs/Order.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **complete** | **kotlin.Boolean** | | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin/docs/Pet.md b/samples/client/petstore/kotlin/docs/Pet.md index c82844b5ee80..665ecfa69c69 100644 --- a/samples/client/petstore/kotlin/docs/Pet.md +++ b/samples/client/petstore/kotlin/docs/Pet.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | [**inline**](#StatusEnum) | pet status in the store | [optional] - + ## Enum: status Name | Value ---- | ----- diff --git a/samples/client/petstore/kotlin/settings.gradle b/samples/client/petstore/kotlin/settings.gradle index 7540d01de36c..5a53369817d7 100644 --- a/samples/client/petstore/kotlin/settings.gradle +++ b/samples/client/petstore/kotlin/settings.gradle @@ -1,2 +1 @@ - -rootProject.name = 'kotlin-petstore-client' \ No newline at end of file +rootProject.name = 'kotlin-petstore-client' diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 60f72b51af95..621943f0f01b 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.ApiResponse diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 08822c67e32a..c42220e5f4cb 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.Order diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 258a2540e9e8..df7073fbc886 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.apis import org.openapitools.client.models.User diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 7d40c8efbc2f..6c517e812a31 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -1,33 +1,38 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * Describes the result of uploading an image resource + * * @param code * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( @Json(name = "code") + val code: kotlin.Int? = null, @Json(name = "type") + val type: kotlin.String? = null, @Json(name = "message") + val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt index ceb0fbc8fe60..9e3a630aff28 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A category for a pet + * * @param id * @param name */ -data class Category ( +data class Category( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt index ed8f8b13a43b..cc54ab1c2a65 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * An order for a pets from the pet store + * * @param id * @param petId * @param quantity @@ -25,19 +27,27 @@ import java.io.Serializable * @param complete */ -data class Order ( +data class Order( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "petId") + val petId: kotlin.Long? = null, @Json(name = "quantity") + val quantity: kotlin.Int? = null, @Json(name = "shipDate") + val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ + /** + * Order Status + */ @Json(name = "status") + val status: Order.Status? = null, @Json(name = "complete") + val complete: kotlin.Boolean? = null ) : Serializable { companion object { @@ -45,10 +55,10 @@ data class Order ( } /** - * Order Status - * Values: placed,approved,delivered - */ - + * Order Status + * + * Values: placed,approved,delivered + */ enum class Status(val value: kotlin.String){ @Json(name = "placed") placed("placed"), @Json(name = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt index 105f485f021d..2268e104bd1d 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -1,14 +1,14 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import org.openapitools.client.models.Category @@ -16,9 +16,11 @@ import org.openapitools.client.models.Tag import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A pet for sale in the pet store + * * @param name * @param photoUrls * @param id @@ -27,19 +29,25 @@ import java.io.Serializable * @param status pet status in the store */ -data class Pet ( +data class Pet( @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "category") + val category: Category? = null, @Json(name = "tags") + val tags: kotlin.collections.List? = null, - /* pet status in the store */ + /** + * pet status in the store + */ @Json(name = "status") + val status: Pet.Status? = null ) : Serializable { companion object { @@ -47,10 +55,10 @@ data class Pet ( } /** - * pet status in the store - * Values: available,pending,sold - */ - + * pet status in the store + * + * Values: available,pending,sold + */ enum class Status(val value: kotlin.String){ @Json(name = "available") available("available"), @Json(name = "pending") pending("pending"), diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt index 944b1cd0a141..7b25720b83bd 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -1,30 +1,34 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A tag for a pet + * * @param id * @param name */ -data class Tag ( +data class Tag( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "name") + val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt index 9697f07d5bf8..e4732851b0c3 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt @@ -1,22 +1,24 @@ /** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ package org.openapitools.client.models import com.squareup.moshi.Json import java.io.Serializable +import kotlin.collections.* /** * A User who is purchasing from the pet store + * * @param id * @param username * @param firstName @@ -27,23 +29,33 @@ import java.io.Serializable * @param userStatus User Status */ -data class User ( +data class User( @Json(name = "id") + val id: kotlin.Long? = null, @Json(name = "username") + val username: kotlin.String? = null, @Json(name = "firstName") + val firstName: kotlin.String? = null, @Json(name = "lastName") + val lastName: kotlin.String? = null, @Json(name = "email") + val email: kotlin.String? = null, @Json(name = "password") + val password: kotlin.String? = null, @Json(name = "phone") + val phone: kotlin.String? = null, - /* User Status */ + /** + * User Status + */ @Json(name = "userStatus") + val userStatus: kotlin.Int? = null ) : Serializable { companion object { From 49e6502630ffe10d2933bfcd343d6919d9927e15 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Sat, 8 Aug 2020 17:23:26 +0200 Subject: [PATCH 3/8] Resolved issues with queries, introduced bundled api client and resolved some minor issues --- .../languages/KotlinClientCodegen.java | 11 ++++- .../kotlin-client/data_class_opt_var.mustache | 4 +- .../multiplatform/ApiClient.kt.mustache | 17 +++++++ .../libraries/multiplatform/api.mustache | 44 ++++++++++------- .../multiplatform/auth/ApiKeyAuth.kt.mustache | 20 ++++---- .../auth/Authentication.kt.mustache | 8 ++-- .../auth/HttpBasicAuth.kt.mustache | 11 ++--- .../auth/HttpBearerAuth.kt.mustache | 6 ++- .../multiplatform/auth/OAuth.kt.mustache | 6 ++- .../multiplatform/build.gradle.kts.mustache | 41 +++++++++------- .../ApiAbstractions.kt.mustache | 47 +++++++++++++++++++ ....kt.mustache => ApiClientBase.kt.mustache} | 16 ++++--- .../infrastructure/RequestConfig.kt.mustache | 4 +- .../infrastructure/encoding.kt.mustache | 5 ++ 14 files changed, 170 insertions(+), 70 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache rename modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/{ApiClient.kt.mustache => ApiClientBase.kt.mustache} (94%) create mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index e19250bcfaed..39a6a7ab5454 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -72,6 +72,7 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen { // (mustache does not allow for boolean operators so we need this extra field) protected boolean doNotUseRxAndCoroutines = true; + protected String baseFolder; protected String authFolder; public enum DateLibrary { @@ -329,7 +330,8 @@ public void processOpts() { // infrastructure destination folder final String infrastructureFolder = (sourceFolder + File.separator + packageName + File.separator + "infrastructure").replace(".", "/"); - authFolder = (sourceFolder + File.separator + packageName + File.separator + "auth").replace(".", "/"); + authFolder = (sourceFolder + File.separator + packageName + File.separator + "auth").replace(".", File.separator); + baseFolder = (sourceFolder + File.separator + packageName).replace(".", File.separator); // additional properties if (additionalProperties.containsKey(DATE_LIBRARY)) { @@ -498,6 +500,7 @@ private void processJVMOkHttpLibrary(final String infrastructureFolder) { setLibrary(JVM_OKHTTP); // jvm specific supporting files + supportingFiles.add(new SupportingFile("infrastructure/ApiClient.kt.mustache", infrastructureFolder, "ApiClient.kt")); supportingFiles.add(new SupportingFile("infrastructure/ApplicationDelegates.kt.mustache", infrastructureFolder, "ApplicationDelegates.kt")); supportingFiles.add(new SupportingFile("infrastructure/Errors.kt.mustache", infrastructureFolder, "Errors.kt")); supportingFiles.add(new SupportingFile("infrastructure/ResponseExtensions.kt.mustache", infrastructureFolder, "ResponseExtensions.kt")); @@ -535,11 +538,16 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { importMapping.put("Base64ByteArray", packageName + ".infrastructure.Base64ByteArray"); importMapping.put("OctetByteArray", packageName + ".infrastructure.OctetByteArray"); + // bundled client file + supportingFiles.add(new SupportingFile("ApiClient.kt.mustache", baseFolder, "ApiClient.kt")); + // multiplatform specific supporting files + supportingFiles.add(new SupportingFile("infrastructure/ApiClientBase.kt.mustache", infrastructureFolder, "ApiClientBase.kt")); supportingFiles.add(new SupportingFile("infrastructure/Base64ByteArray.kt.mustache", infrastructureFolder, "Base64ByteArray.kt")); supportingFiles.add(new SupportingFile("infrastructure/Bytes.kt.mustache", infrastructureFolder, "Bytes.kt")); supportingFiles.add(new SupportingFile("infrastructure/HttpResponse.kt.mustache", infrastructureFolder, "HttpResponse.kt")); supportingFiles.add(new SupportingFile("infrastructure/OctetByteArray.kt.mustache", infrastructureFolder, "OctetByteArray.kt")); + supportingFiles.add(new SupportingFile("infrastructure/encoding.kt.mustache", infrastructureFolder, "encoding.kt")); // multiplatform specific auth supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.kt.mustache", authFolder, "ApiKeyAuth.kt")); @@ -564,7 +572,6 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { private void commonJvmMultiplatformSupportingFiles(String infrastructureFolder) { - supportingFiles.add(new SupportingFile("infrastructure/ApiClient.kt.mustache", infrastructureFolder, "ApiClient.kt")); supportingFiles.add(new SupportingFile("infrastructure/ApiAbstractions.kt.mustache", infrastructureFolder, "ApiAbstractions.kt")); supportingFiles.add(new SupportingFile("infrastructure/RequestConfig.kt.mustache", infrastructureFolder, "RequestConfig.kt")); supportingFiles.add(new SupportingFile("infrastructure/RequestMethod.kt.mustache", infrastructureFolder, "RequestMethod.kt")); diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache index c2cca54ff4de..1b58be900a66 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class_opt_var.mustache @@ -14,8 +14,10 @@ @field:JsonProperty("{{{vendorExtensions.x-base-name-literal}}}") {{/jackson}} {{/multiplatform}} + {{#multiplatform}} + @SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") + {{/multiplatform}} {{#deprecated}} @Deprecated(message = "This property is deprecated.") {{/deprecated}} - {{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}} {{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}List{{/isList}}{{^isList}}Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache new file mode 100644 index 000000000000..604e73132d8c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache @@ -0,0 +1,17 @@ +package {{packageName}} + +import io.ktor.client.engine.HttpClientEngine +import kotlinx.serialization.json.JsonConfiguration +import {{packageName}}.apis.* + +class ApiClient( + baseUrl: String = "{{{basePath}}}", + httpClientEngine: HttpClientEngine? = null, + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable +) { + {{#apiInfo}} + {{#apis}} + val {{{classVarName}}} = {{{classFilename}}}(baseUrl, httpClientEngine, jsonConfiguration) + {{/apis}} + {{/apiInfo}} +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache index 9856348d3709..a3a6b2aac608 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache @@ -21,8 +21,7 @@ import kotlinx.serialization.builtins.serializer baseUrl: kotlin.String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer -) : ApiClient(baseUrl, httpClientEngine, serializer) { - +) : ApiClientBase(baseUrl, httpClientEngine, serializer) { constructor( baseUrl: String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, @@ -45,22 +44,22 @@ import kotlinx.serialization.builtins.serializer {{/allParams}} ): HttpResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { {{! TODO: Optimize all the ?.let to only the places where it's needed }} - val localVariableAuthNames = listOf({{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}) + val authNames_ = listOf({{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}) - val localVariableBody = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{{paramName}}}?.let { {{operationIdCamelCase}}Request(it{{^isList}}.asList(){{/isList}}) }{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{{paramName}}}?.let { {{operationIdCamelCase}}Request(it) }{{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} + val body_ = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}{{^isList}}.asList(){{/isList}}){{^required}} }{{/required}}{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}){{^required}} }{{/required}}{{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} {{^hasBodyParam}} {{#hasFormParams}} {{#isMultipart}} formData { {{#formParams}} - {{{paramName}}}?.let { append(FormPart("{{{baseName}}}", it)) } + {{^required}}{{{paramName}}}?.let { {{/required}}append(FormPart("{{{baseName}}}", {{{paramName}}})){{^required}} }{{/required}} {{/formParams}} } {{/isMultipart}} {{^isMultipart}} ParametersBuilder().also { {{#formParams}} - {{{paramName}}}?.apply { it.append("{{{baseName}}}", {{{paramName}}}.toString()) } + {{^required}}{{{paramName}}}?.apply { {{/required}}it.append("{{{baseName}}}", {{{paramName}}}.toString()){{^required}} }{{/required}} {{/formParams}} }.build() {{/isMultipart}} @@ -71,29 +70,38 @@ import kotlinx.serialization.builtins.serializer {{/hasBodyParam}} {{! TODO: Don't use all the listOf() }} - val localVariableQuery = mutableMapOf?>( - {{#queryParams}} - "{{baseName}}" to {{#isContainer}}{{{paramName}}}?.let { toMultiValue(it, "{{collectionFormat}}") }{{/isContainer}}{{^isContainer}}listOf("${{{paramName}}}"){{/isContainer}}{{#hasMore}},{{/hasMore}} - {{/queryParams}} - ) + val queries_ = Queries() + {{#queryParams}} + {{#isContainer}} + {{#isMapContainer}} + {{^required}}if ({{{paramName}}} != null) {{/required}}queries_.addMap({{{paramName}}}) + {{/isMapContainer}} + {{^isMapContainer}} + {{^required}}if ({{{paramName}}} != null) {{/required}}queries_.addMulti("{{baseName}}", {{{paramName}}}, "{{collectionFormat}}") + {{/isMapContainer}} + {{/isContainer}} + {{^isContainer}} + queries_.add("{{baseName}}", {{{paramName}}}) + {{/isContainer}} + {{/queryParams}} - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( {{#headerParams}} "{{baseName}}" to {{#isContainer}}{{{paramName}}}?.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this?.toString(){{/isContainer}}{{#hasMore}},{{/hasMore}} {{/headerParams}} ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.{{httpMethod}}, "{{path}}"{{#pathParams}}.replace("{{curly true}}{{baseName}}{{curly}}", "${{{paramName}}}"){{/pathParams}}, - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return {{#hasBodyParam}}jsonRequest{{/hasBodyParam}}{{^hasBodyParam}}{{#hasFormParams}}{{#isMultipart}}multipartFormRequest{{/isMultipart}}{{^isMultipart}}urlEncodedFormRequest{{/isMultipart}}{{/hasFormParams}}{{^hasFormParams}}request{{/hasFormParams}}{{/hasBodyParam}}( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).{{#isListContainer}}wrap<{{operationIdCamelCase}}Response>().map { value{{^isList}}.toTypedArray(){{/isList}} }{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}wrap<{{operationIdCamelCase}}Response>().map { value }{{/isMapContainer}}{{^isMapContainer}}wrap(){{/isMapContainer}}{{/isListContainer}} } {{#hasBodyParam}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache index 05447201fb80..9141647d4a84 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/ApiKeyAuth.kt.mustache @@ -1,16 +1,18 @@ package {{packageName}}.auth -class ApiKeyAuth(private val location: String, val paramName: String) : Authentication { +import {{packageName}}.infrastructure.Queries + +{{#nonPublicApi}}internal {{/nonPublicApi}}class ApiKeyAuth(private val location: String, val paramName: String) : Authentication { var apiKey: String? = null var apiKeyPrefix: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { - val key: String = apiKey ?: return - val prefix: String? = apiKeyPrefix - val value: String = if (prefix != null) "$prefix $key" else key - when (location) { - "query" -> query[paramName] = listOf(value) - "header" -> headers[paramName] = value + override fun apply(queries: Queries, headers: MutableMap) { + val key: String = apiKey ?: return + val prefix: String? = apiKeyPrefix + val value: String = if (prefix != null) "$prefix $key" else key + when (location) { + "query" -> queries.add(paramName, value) + "header" -> headers[paramName] = value + } } - } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache index 4f7101a95f1b..1873652b11b9 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/Authentication.kt.mustache @@ -1,11 +1,13 @@ package {{packageName}}.auth -interface Authentication { +import {{packageName}}.infrastructure.Queries + +{{#nonPublicApi}}internal {{/nonPublicApi}}interface Authentication { /** * Apply authentication settings to header and query params. * - * @param query Query parameters. + * @param queries Query parameters. * @param headers Header parameters. */ - fun apply(query: MutableMap?>, headers: MutableMap) + fun apply(queries: Queries, headers: MutableMap) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache index 3a8c5a76cc22..a9d6adabeabf 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBasicAuth.kt.mustache @@ -1,17 +1,16 @@ package {{packageName}}.auth -import io.ktor.util.InternalAPI -import io.ktor.util.encodeBase64 +import {{packageName}}.infrastructure.Queries +import {{packageName}}.infrastructure.toBase64 -class HttpBasicAuth : Authentication { +{{#nonPublicApi}}internal {{/nonPublicApi}}class HttpBasicAuth : Authentication { var username: String? = null var password: String? = null - @InternalAPI - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { if (username == null && password == null) return val str = (username ?: "") + ":" + (password ?: "") - val auth = str.encodeBase64() + val auth = str.toBase64() headers["Authorization"] = "Basic $auth" } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache index d7ac04766eea..55806037e250 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/HttpBearerAuth.kt.mustache @@ -1,9 +1,11 @@ package {{packageName}}.auth -class HttpBearerAuth(private val scheme: String?) : Authentication { +import {{packageName}}.infrastructure.Queries + +{{#nonPublicApi}}internal {{/nonPublicApi}}class HttpBearerAuth(private val scheme: String?) : Authentication { var bearerToken: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { val token: String = bearerToken ?: return headers["Authorization"] = (if (scheme != null) upperCaseBearer(scheme)!! + " " else "") + token } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache index 5d9ccf6bb973..b85b0226728e 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/auth/OAuth.kt.mustache @@ -1,9 +1,11 @@ package {{packageName}}.auth -class OAuth : Authentication { +import {{packageName}}.infrastructure.Queries + +{{#nonPublicApi}}internal {{/nonPublicApi}}class OAuth : Authentication { var accessToken: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { val token: String = accessToken ?: return headers["Authorization"] = "Bearer $token" } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache index dbc070fe6f18..49689446d708 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache @@ -6,8 +6,8 @@ plugins { group = "{{groupId}}" version = "{{artifactVersion}}" -val kotlin_version = "1.3.72" -val ktor_version = "1.3.2" +val ktorVersion = "1.3.2" +val kotlinxIoVersion = "0.1.16" repositories { jcenter() @@ -41,9 +41,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-common")) - api("io.ktor:ktor-client-core:$ktor_version") - api("io.ktor:ktor-client-json:$ktor_version") - api("io.ktor:ktor-client-serialization:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinxIoVersion") + api("io.ktor:ktor-client-core:$ktorVersion") + api("io.ktor:ktor-client-json:$ktorVersion") + api("io.ktor:ktor-client-serialization:$ktorVersion") } } @@ -53,7 +54,7 @@ kotlin { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) - implementation("io.ktor:ktor-client-mock:$ktor_version") + implementation("io.ktor:ktor-client-mock:$ktorVersion") } } @@ -62,9 +63,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) - api("io.ktor:ktor-client-core-jvm:$ktor_version") - api("io.ktor:ktor-client-json-jvm:$ktor_version") - api("io.ktor:ktor-client-serialization-jvm:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:$kotlinxIoVersion") + api("io.ktor:ktor-client-core-jvm:$ktorVersion") + api("io.ktor:ktor-client-json-jvm:$ktorVersion") + api("io.ktor:ktor-client-serialization-jvm:$ktorVersion") } } @@ -75,7 +77,7 @@ kotlin { implementation(kotlin("test")) implementation(kotlin("test-junit5")) implementation("org.junit.jupiter:junit-jupiter:5.6.2") - implementation("io.ktor:ktor-client-mock-jvm:$ktor_version") + implementation("io.ktor:ktor-client-mock-jvm:$ktorVersion") } } @@ -83,9 +85,11 @@ kotlin { kotlin.srcDir("src/ios/main") dependencies { - api("io.ktor:ktor-client-ios:$ktor_version") - api("io.ktor:ktor-client-json-native:$ktor_version") - api("io.ktor:ktor-client-serialization-native:$ktor_version") + implementation(kotlin("stdlib-native")) + implementation("org.jetbrains.kotlinx:kotlinx-io-native:$kotlinxIoVersion") + api("io.ktor:ktor-client-ios:$ktorVersion") + api("io.ktor:ktor-client-json-native:$ktorVersion") + api("io.ktor:ktor-client-serialization-native:$ktorVersion") } } @@ -93,7 +97,7 @@ kotlin { kotlin.srcDir("src/ios/test") dependencies { - implementation("io.ktor:ktor-client-mock-native:$ktor_version") + implementation("io.ktor:ktor-client-mock-native:$ktorVersion") } } @@ -102,9 +106,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-js")) - api("io.ktor:ktor-client-js:$ktor_version") - api("io.ktor:ktor-client-json-js:$ktor_version") - api("io.ktor:ktor-client-serialization-js:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io-js:$kotlinxIoVersion") + api("io.ktor:ktor-client-js:$ktorVersion") + api("io.ktor:ktor-client-json-js:$ktorVersion") + api("io.ktor:ktor-client-serialization-js:$ktorVersion") } } @@ -112,7 +117,7 @@ kotlin { kotlin.srcDir("src/js/test") dependencies { - implementation("io.ktor:ktor-client-mock-js:$ktor_version") + implementation("io.ktor:ktor-client-mock-js:$ktorVersion") } } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache new file mode 100644 index 000000000000..1197ae8c7e2f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache @@ -0,0 +1,47 @@ +package {{packageName}}.infrastructure + +{{#nonPublicApi}}internal {{/nonPublicApi}}fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) { + "csv" -> "," + "tsv" -> "\t" + "pipe" -> "|" + "space" -> " " + else -> "" +} + +{{#nonPublicApi}}internal {{/nonPublicApi}}sealed class QueryParam { + data class Single(val value: String) : QueryParam() + data class Multi(val values: Iterable) : QueryParam() +} + +{{#nonPublicApi}}internal {{/nonPublicApi}}class Queries(val queries: MutableMap = mutableMapOf()) { + // Single + fun add(name: String, value: String?) { + if (value != null) { + queries[name] = QueryParam.Single(value) + } + } + + fun add(name: String, value: Any?) { + if (value != null) { + queries[name] = QueryParam.Single(value.toString()) + } + } + + // For Iterables + fun addMulti(name: String, values: Iterable, collectionFormat: String) { + val transformed = values.filterNotNull().map { it.toString() } + queries[name] = when (collectionFormat) { + "multi" -> QueryParam.Multi(transformed) + else -> QueryParam.Single(transformed.joinToString(separator = collectionDelimiter(collectionFormat))) + } + } + + // For Arrays + fun addMulti(name: String, values: Array, collectionFormat: String) = + addMulti(name, values.asIterable(), collectionFormat) + + // For Maps + fun addMap(values: Map) { + queries.putAll(values.filterValues { it != null }.mapValues { QueryParam.Single(it.value.toString()) }) + } +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache similarity index 94% rename from modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache rename to modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache index 632b95c575f5..8bf5368dff8f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache @@ -20,12 +20,11 @@ import kotlinx.serialization.json.JsonConfiguration import {{packageName}}.auth.* -{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClient( +{{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClientBase( private val baseUrl: String, httpClientEngine: HttpClientEngine?, private val serializer: KotlinxSerializer ) { - constructor( baseUrl: String, httpClientEngine: HttpClientEngine?, @@ -33,7 +32,7 @@ import {{packageName}}.auth.* ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) private val client: HttpClient by lazy { - val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClient.serializer } + val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClientBase.serializer } val clientConfig: (HttpClientConfig<*>) -> Unit = { it.install(JsonFeature, jsonConfig) } httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) } @@ -145,9 +144,12 @@ import {{packageName}}.auth.* this.url { this.takeFrom(URLBuilder(baseUrl)) appendPath(requestConfig.path.trimStart('/').split('/')) - requestConfig.query.forEach { query -> - query.value?.forEach { value -> - parameter(query.key, value) + for ((name, value) in requestConfig.queries.queries) { + when (value) { + is QueryParam.Single -> parameter(name, value.value) + is QueryParam.Multi -> value.values.forEach { + parameter(name, it) + } } } } @@ -162,7 +164,7 @@ import {{packageName}}.auth.* private fun RequestConfig.updateForAuth(authNames: List) { for (authName in authNames) { val auth = authentications[authName] ?: throw Exception("Authentication undefined: $authName") - auth.apply(query, headers) + auth.apply(queries, headers) } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache index 56ca714971ea..37b76a9bac4c 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/RequestConfig.kt.mustache @@ -5,12 +5,12 @@ package {{packageName}}.infrastructure * NOTE: This object doesn't include 'body' because it * allows for caching of the constructed object * for many request definitions. - * NOTE: Headers is a Map because rfc2616 defines + * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ {{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), - val query: MutableMap?> = mutableMapOf() + val queries: Queries = Queries() ) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache new file mode 100644 index 000000000000..1fddae2868f0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache @@ -0,0 +1,5 @@ +package {{packageName}}.infrastructure + +import kotlinx.io.core.toByteArray + +fun String.toBase64() = toByteArray().encodeBase64() From 50cf3a167a088e41f06e59a6bb97f0e01387ff21 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Sat, 8 Aug 2020 17:25:37 +0200 Subject: [PATCH 4/8] Updated samples --- .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../.openapi-generator/FILES | 4 +- .../kotlin-multiplatform/build.gradle.kts | 41 ++-- .../main/org/openapitools/client/ApiClient.kt | 15 ++ .../org/openapitools/client/apis/PetApi.kt | 179 +++++++++--------- .../org/openapitools/client/apis/StoreApi.kt | 87 ++++----- .../org/openapitools/client/apis/UserApi.kt | 175 ++++++++--------- .../openapitools/client/auth/ApiKeyAuth.kt | 18 +- .../client/auth/Authentication.kt | 6 +- .../openapitools/client/auth/HttpBasicAuth.kt | 9 +- .../client/auth/HttpBearerAuth.kt | 4 +- .../org/openapitools/client/auth/OAuth.kt | 4 +- .../client/infrastructure/ApiAbstractions.kt | 44 ++++- .../{ApiClient.kt => ApiClientBase.kt} | 16 +- .../client/infrastructure/RequestConfig.kt | 4 +- .../client/infrastructure/encoding.kt | 5 + .../openapitools/client/models/ApiResponse.kt | 6 +- .../openapitools/client/models/Category.kt | 4 +- .../org/openapitools/client/models/Order.kt | 12 +- .../org/openapitools/client/models/Pet.kt | 8 +- .../org/openapitools/client/models/Tag.kt | 4 +- .../org/openapitools/client/models/User.kt | 16 +- .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - .../openapitools/client/models/ApiResponse.kt | 3 - .../openapitools/client/models/Category.kt | 2 - .../org/openapitools/client/models/Order.kt | 6 - .../org/openapitools/client/models/Pet.kt | 4 - .../org/openapitools/client/models/Tag.kt | 2 - .../org/openapitools/client/models/User.kt | 8 - 99 files changed, 349 insertions(+), 637 deletions(-) create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt rename samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/{ApiClient.kt => ApiClientBase.kt} (94%) create mode 100644 samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 6409c6cc0f3b..a98396451239 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @SerializedName("code") - val code: kotlin.Int? = null, @SerializedName("type") - val type: kotlin.String? = null, @SerializedName("message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt index 65412f610b3c..5924b79b155a 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt index 8375127110e3..459785c81f8a 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("petId") - val petId: kotlin.Long? = null, @SerializedName("quantity") - val quantity: kotlin.Int? = null, @SerializedName("shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @SerializedName("status") - val status: Order.Status? = null, @SerializedName("complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt index e852fd3fa4da..da77e2c7872e 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @SerializedName("photoUrls") val photoUrls: kotlin.collections.List, @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("category") - val category: Category? = null, @SerializedName("tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @SerializedName("status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt index 380648dcd14f..c87b45c7c864 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt index f84ff3078256..8542cede7849 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("username") - val username: kotlin.String? = null, @SerializedName("firstName") - val firstName: kotlin.String? = null, @SerializedName("lastName") - val lastName: kotlin.String? = null, @SerializedName("email") - val email: kotlin.String? = null, @SerializedName("password") - val password: kotlin.String? = null, @SerializedName("phone") - val phone: kotlin.String? = null, /** * User Status */ @SerializedName("userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index d188547f6092..ad42c79cb683 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @field:JsonProperty("code") - val code: kotlin.Int? = null, @field:JsonProperty("type") - val type: kotlin.String? = null, @field:JsonProperty("message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt index 282700d38784..5cb50779756e 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @field:JsonProperty("id") - val id: kotlin.Long? = null, @field:JsonProperty("name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt index 9355bd6ac312..6efc679e7b28 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @field:JsonProperty("id") - val id: kotlin.Long? = null, @field:JsonProperty("petId") - val petId: kotlin.Long? = null, @field:JsonProperty("quantity") - val quantity: kotlin.Int? = null, @field:JsonProperty("shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @field:JsonProperty("status") - val status: Order.Status? = null, @field:JsonProperty("complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt index f929547b0f35..5808c80b6cf2 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @field:JsonProperty("photoUrls") val photoUrls: kotlin.collections.List, @field:JsonProperty("id") - val id: kotlin.Long? = null, @field:JsonProperty("category") - val category: Category? = null, @field:JsonProperty("tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @field:JsonProperty("status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt index 106b57ab299c..ffbb7f0955bf 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @field:JsonProperty("id") - val id: kotlin.Long? = null, @field:JsonProperty("name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt index 15bdd07bfa22..fe416122d7f1 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @field:JsonProperty("id") - val id: kotlin.Long? = null, @field:JsonProperty("username") - val username: kotlin.String? = null, @field:JsonProperty("firstName") - val firstName: kotlin.String? = null, @field:JsonProperty("lastName") - val lastName: kotlin.String? = null, @field:JsonProperty("email") - val email: kotlin.String? = null, @field:JsonProperty("password") - val password: kotlin.String? = null, @field:JsonProperty("phone") - val phone: kotlin.String? = null, /** * User Status */ @field:JsonProperty("userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 36db4bcb996f..2f46a69fd3ef 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt index 653069f5198b..e7fe5b524430 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt index bf6fb8a4d2cc..63853cde7b09 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index e800cb5f94f6..fe32421ec09c 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt index f8b04268ae3d..d7b7334c9b2c 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt index a8efdaeb5fe0..faa11fc9e716 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index b477db1469e8..195b2c34e45a 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -26,13 +26,10 @@ import kotlin.collections.* data class ApiResponse( @SerializedName("code") - val code: kotlin.Int? = null, @SerializedName("type") - val type: kotlin.String? = null, @SerializedName("message") - val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt index b07978b706e6..cf9fe898a3da 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Category( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt index 454fbcf9156a..1ba287a17319 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -29,25 +29,19 @@ import kotlin.collections.* data class Order( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("petId") - val petId: kotlin.Long? = null, @SerializedName("quantity") - val quantity: kotlin.Int? = null, @SerializedName("shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @SerializedName("status") - val status: Order.Status? = null, @SerializedName("complete") - val complete: kotlin.Boolean? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt index ffcb6f11dcc4..6222414ab912 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -35,19 +35,15 @@ data class Pet( @SerializedName("photoUrls") val photoUrls: kotlin.collections.List, @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("category") - val category: Category? = null, @SerializedName("tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @SerializedName("status") - val status: Pet.Status? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt index febd9eae0818..708b6d47648c 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Tag( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt index 0de0ad65eebe..dbb6b2ca364d 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/models/User.kt @@ -31,31 +31,23 @@ import kotlin.collections.* data class User( @SerializedName("id") - val id: kotlin.Long? = null, @SerializedName("username") - val username: kotlin.String? = null, @SerializedName("firstName") - val firstName: kotlin.String? = null, @SerializedName("lastName") - val lastName: kotlin.String? = null, @SerializedName("email") - val email: kotlin.String? = null, @SerializedName("password") - val password: kotlin.String? = null, @SerializedName("phone") - val phone: kotlin.String? = null, /** * User Status */ @SerializedName("userStatus") - val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index e9f96bf1c999..0c4c09637972 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -26,13 +26,10 @@ import kotlin.collections.* @JsonClass(generateAdapter = true) data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt index 0fa0d400851c..eee91ac9906f 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -25,10 +25,8 @@ import kotlin.collections.* @JsonClass(generateAdapter = true) data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt index 5544a8f122cb..27f142a13faa 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -29,25 +29,19 @@ import kotlin.collections.* @JsonClass(generateAdapter = true) data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt index 1d4b7ebc2f3c..f1fb3fbb862c 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -35,19 +35,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt index 4b382da5e4d9..453a6d419bec 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -25,10 +25,8 @@ import kotlin.collections.* @JsonClass(generateAdapter = true) data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt index 0a51a7fb86b6..a6a8094f04cb 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/models/User.kt @@ -31,31 +31,23 @@ import kotlin.collections.* @JsonClass(generateAdapter = true) data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES index d14d905efe4f..5fe12725ed2e 100644 --- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/FILES @@ -15,6 +15,7 @@ gradle/wrapper/gradle-wrapper.properties gradlew gradlew.bat settings.gradle.kts +src/common/main/org/openapitools/client/ApiClient.kt src/common/main/org/openapitools/client/apis/PetApi.kt src/common/main/org/openapitools/client/apis/StoreApi.kt src/common/main/org/openapitools/client/apis/UserApi.kt @@ -24,13 +25,14 @@ src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt src/common/main/org/openapitools/client/auth/OAuth.kt src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt -src/common/main/org/openapitools/client/infrastructure/ApiClient.kt +src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt src/common/main/org/openapitools/client/infrastructure/Bytes.kt src/common/main/org/openapitools/client/infrastructure/HttpResponse.kt src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt src/common/main/org/openapitools/client/infrastructure/RequestMethod.kt +src/common/main/org/openapitools/client/infrastructure/encoding.kt src/common/main/org/openapitools/client/models/ApiResponse.kt src/common/main/org/openapitools/client/models/Category.kt src/common/main/org/openapitools/client/models/Order.kt diff --git a/samples/client/petstore/kotlin-multiplatform/build.gradle.kts b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts index 8093161799af..eff454c582b3 100644 --- a/samples/client/petstore/kotlin-multiplatform/build.gradle.kts +++ b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts @@ -6,8 +6,8 @@ plugins { group = "org.openapitools" version = "1.0.0" -val kotlin_version = "1.3.72" -val ktor_version = "1.3.2" +val ktorVersion = "1.3.2" +val kotlinxIoVersion = "0.1.16" repositories { jcenter() @@ -41,9 +41,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-common")) - api("io.ktor:ktor-client-core:$ktor_version") - api("io.ktor:ktor-client-json:$ktor_version") - api("io.ktor:ktor-client-serialization:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinxIoVersion") + api("io.ktor:ktor-client-core:$ktorVersion") + api("io.ktor:ktor-client-json:$ktorVersion") + api("io.ktor:ktor-client-serialization:$ktorVersion") } } @@ -53,7 +54,7 @@ kotlin { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) - implementation("io.ktor:ktor-client-mock:$ktor_version") + implementation("io.ktor:ktor-client-mock:$ktorVersion") } } @@ -62,9 +63,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) - api("io.ktor:ktor-client-core-jvm:$ktor_version") - api("io.ktor:ktor-client-json-jvm:$ktor_version") - api("io.ktor:ktor-client-serialization-jvm:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:$kotlinxIoVersion") + api("io.ktor:ktor-client-core-jvm:$ktorVersion") + api("io.ktor:ktor-client-json-jvm:$ktorVersion") + api("io.ktor:ktor-client-serialization-jvm:$ktorVersion") } } @@ -75,7 +77,7 @@ kotlin { implementation(kotlin("test")) implementation(kotlin("test-junit5")) implementation("org.junit.jupiter:junit-jupiter:5.6.2") - implementation("io.ktor:ktor-client-mock-jvm:$ktor_version") + implementation("io.ktor:ktor-client-mock-jvm:$ktorVersion") } } @@ -83,9 +85,11 @@ kotlin { kotlin.srcDir("src/ios/main") dependencies { - api("io.ktor:ktor-client-ios:$ktor_version") - api("io.ktor:ktor-client-json-native:$ktor_version") - api("io.ktor:ktor-client-serialization-native:$ktor_version") + implementation(kotlin("stdlib-native")) + implementation("org.jetbrains.kotlinx:kotlinx-io-native:$kotlinxIoVersion") + api("io.ktor:ktor-client-ios:$ktorVersion") + api("io.ktor:ktor-client-json-native:$ktorVersion") + api("io.ktor:ktor-client-serialization-native:$ktorVersion") } } @@ -93,7 +97,7 @@ kotlin { kotlin.srcDir("src/ios/test") dependencies { - implementation("io.ktor:ktor-client-mock-native:$ktor_version") + implementation("io.ktor:ktor-client-mock-native:$ktorVersion") } } @@ -102,9 +106,10 @@ kotlin { dependencies { implementation(kotlin("stdlib-js")) - api("io.ktor:ktor-client-js:$ktor_version") - api("io.ktor:ktor-client-json-js:$ktor_version") - api("io.ktor:ktor-client-serialization-js:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-io-js:$kotlinxIoVersion") + api("io.ktor:ktor-client-js:$ktorVersion") + api("io.ktor:ktor-client-json-js:$ktorVersion") + api("io.ktor:ktor-client-serialization-js:$ktorVersion") } } @@ -112,7 +117,7 @@ kotlin { kotlin.srcDir("src/js/test") dependencies { - implementation("io.ktor:ktor-client-mock-js:$ktor_version") + implementation("io.ktor:ktor-client-mock-js:$ktorVersion") } } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt new file mode 100644 index 000000000000..04bb940f5f49 --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt @@ -0,0 +1,15 @@ +package org.openapitools.client + +import io.ktor.client.engine.HttpClientEngine +import kotlinx.serialization.json.JsonConfiguration +import org.openapitools.client.apis.* + +class ApiClient( + baseUrl: String = "http://petstore.swagger.io/v2", + httpClientEngine: HttpClientEngine? = null, + jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable +) { + val pet = PetApi(baseUrl, httpClientEngine, jsonConfiguration) + val store = StoreApi(baseUrl, httpClientEngine, jsonConfiguration) + val user = UserApi(baseUrl, httpClientEngine, jsonConfiguration) +} diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt index 2a68d42db119..401b6374c0e3 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt @@ -30,8 +30,7 @@ class PetApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer -) : ApiClient(baseUrl, httpClientEngine, serializer) { - +) : ApiClientBase(baseUrl, httpClientEngine, serializer) { constructor( baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, @@ -47,27 +46,26 @@ class PetApi constructor( suspend fun addPet( body: Pet ): HttpResponse { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = body + val body_ = body - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/pet", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } @@ -83,29 +81,28 @@ class PetApi constructor( petId: kotlin.Long, apiKey: kotlin.String? = null ): HttpResponse { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( "api_key" to this?.toString() ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.DELETE, "/pet/{petId}".replace("petId", "$petId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -118,29 +115,28 @@ class PetApi constructor( suspend fun findPetsByStatus( status: kotlin.collections.List ): HttpResponse> { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - "status" to status?.let { toMultiValue(it, "csv") } - ) + val queries_ = Queries() + queries_.addMulti("status", status, "csv") - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/pet/findByStatus", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap().map { value } } @Serializable @@ -166,29 +162,28 @@ class PetApi constructor( suspend fun findPetsByTags( tags: kotlin.collections.List ): HttpResponse> { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - "tags" to tags?.let { toMultiValue(it, "csv") } - ) + val queries_ = Queries() + queries_.addMulti("tags", tags, "csv") - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/pet/findByTags", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap().map { value } } @Serializable @@ -214,28 +209,27 @@ class PetApi constructor( suspend fun getPetById( petId: kotlin.Long ): HttpResponse { - val localVariableAuthNames = listOf("api_key") + val authNames_ = listOf("api_key") - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/pet/{petId}".replace("petId", "$petId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -247,27 +241,26 @@ class PetApi constructor( suspend fun updatePet( body: Pet ): HttpResponse { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = body + val body_ = body - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.PUT, "/pet", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } @@ -285,31 +278,30 @@ class PetApi constructor( name: kotlin.String? = null, status: kotlin.String? = null ): HttpResponse { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = + val body_ = ParametersBuilder().also { name?.apply { it.append("name", name.toString()) } status?.apply { it.append("status", status.toString()) } }.build() - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/pet/{petId}".replace("petId", "$petId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return urlEncodedFormRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -326,31 +318,30 @@ class PetApi constructor( additionalMetadata: kotlin.String? = null, file: io.ktor.client.request.forms.InputProvider? = null ): HttpResponse { - val localVariableAuthNames = listOf("petstore_auth") + val authNames_ = listOf("petstore_auth") - val localVariableBody = + val body_ = formData { - additionalMetadata?.let { append(FormPart("additionalMetadata", it)) } - file?.let { append(FormPart("file", it)) } + additionalMetadata?.let { append(FormPart("additionalMetadata", additionalMetadata)) } + file?.let { append(FormPart("file", file)) } } - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/pet/{petId}/uploadImage".replace("petId", "$petId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return multipartFormRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt index 34319c6d10fb..865b44a5012f 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt @@ -29,8 +29,7 @@ class StoreApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer -) : ApiClient(baseUrl, httpClientEngine, serializer) { - +) : ApiClientBase(baseUrl, httpClientEngine, serializer) { constructor( baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, @@ -46,28 +45,27 @@ class StoreApi constructor( suspend fun deleteOrder( orderId: kotlin.String ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.DELETE, "/store/order/{orderId}".replace("orderId", "$orderId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -78,28 +76,27 @@ class StoreApi constructor( @Suppress("UNCHECKED_CAST") suspend fun getInventory( ): HttpResponse> { - val localVariableAuthNames = listOf("api_key") + val authNames_ = listOf("api_key") - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/store/inventory", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap().map { value } } @Serializable @@ -122,28 +119,27 @@ class StoreApi constructor( suspend fun getOrderById( orderId: kotlin.Long ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/store/order/{orderId}".replace("orderId", "$orderId"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -156,27 +152,26 @@ class StoreApi constructor( suspend fun placeOrder( body: Order ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = body + val body_ = body - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/store/order", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt index 677d7a85e25e..5ea1dd47c931 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt @@ -29,8 +29,7 @@ class UserApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, serializer: KotlinxSerializer -) : ApiClient(baseUrl, httpClientEngine, serializer) { - +) : ApiClientBase(baseUrl, httpClientEngine, serializer) { constructor( baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, @@ -46,27 +45,26 @@ class UserApi constructor( suspend fun createUser( body: User ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = body + val body_ = body - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/user", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } @@ -80,27 +78,26 @@ class UserApi constructor( suspend fun createUsersWithArrayInput( body: kotlin.collections.List ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = body?.let { CreateUsersWithArrayInputRequest(it) } + val body_ = CreateUsersWithArrayInputRequest(body) - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/user/createWithArray", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } @@ -126,27 +123,26 @@ class UserApi constructor( suspend fun createUsersWithListInput( body: kotlin.collections.List ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = body?.let { CreateUsersWithListInputRequest(it) } + val body_ = CreateUsersWithListInputRequest(body) - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.POST, "/user/createWithList", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } @@ -172,28 +168,27 @@ class UserApi constructor( suspend fun deleteUser( username: kotlin.String ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.DELETE, "/user/{username}".replace("username", "$username"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -206,28 +201,27 @@ class UserApi constructor( suspend fun getUserByName( username: kotlin.String ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/user/{username}".replace("username", "$username"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -242,30 +236,29 @@ class UserApi constructor( username: kotlin.String, password: kotlin.String ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - "username" to listOf("$username"), - "password" to listOf("$password") - ) + val queries_ = Queries() + queries_.add("username", username) + queries_.add("password", password) - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/user/login", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -275,28 +268,27 @@ class UserApi constructor( */ suspend fun logoutUser( ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = + val body_ = io.ktor.client.utils.EmptyContent - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.GET, "/user/logout", - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return request( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } /** @@ -310,27 +302,26 @@ class UserApi constructor( username: kotlin.String, body: User ): HttpResponse { - val localVariableAuthNames = listOf() + val authNames_ = listOf() - val localVariableBody = body + val body_ = body - val localVariableQuery = mutableMapOf?>( - ) + val queries_ = Queries() - val localVariableHeaders = mutableMapOf( + val headers_ = mutableMapOf( ) - val localVariableConfig = RequestConfig( + val config_ = RequestConfig( RequestMethod.PUT, "/user/{username}".replace("username", "$username"), - query = localVariableQuery, - headers = localVariableHeaders + queries = queries_, + headers = headers_ ) return jsonRequest( - localVariableConfig, - localVariableBody, - localVariableAuthNames + config_, + body_, + authNames_ ).wrap() } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt index 5393e5bb286a..2eda3b4c837b 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/ApiKeyAuth.kt @@ -1,16 +1,18 @@ package org.openapitools.client.auth +import org.openapitools.client.infrastructure.Queries + class ApiKeyAuth(private val location: String, val paramName: String) : Authentication { var apiKey: String? = null var apiKeyPrefix: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { - val key: String = apiKey ?: return - val prefix: String? = apiKeyPrefix - val value: String = if (prefix != null) "$prefix $key" else key - when (location) { - "query" -> query[paramName] = listOf(value) - "header" -> headers[paramName] = value + override fun apply(queries: Queries, headers: MutableMap) { + val key: String = apiKey ?: return + val prefix: String? = apiKeyPrefix + val value: String = if (prefix != null) "$prefix $key" else key + when (location) { + "query" -> queries.add(paramName, value) + "header" -> headers[paramName] = value + } } - } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt index 6abcf7c0a04c..b96b9d7d5c78 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/Authentication.kt @@ -1,11 +1,13 @@ package org.openapitools.client.auth +import org.openapitools.client.infrastructure.Queries + interface Authentication { /** * Apply authentication settings to header and query params. * - * @param query Query parameters. + * @param queries Query parameters. * @param headers Header parameters. */ - fun apply(query: MutableMap?>, headers: MutableMap) + fun apply(queries: Queries, headers: MutableMap) } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt index c1ab3b59353e..8df0175fe7a1 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBasicAuth.kt @@ -1,17 +1,16 @@ package org.openapitools.client.auth -import io.ktor.util.InternalAPI -import io.ktor.util.encodeBase64 +import org.openapitools.client.infrastructure.Queries +import org.openapitools.client.infrastructure.toBase64 class HttpBasicAuth : Authentication { var username: String? = null var password: String? = null - @InternalAPI - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { if (username == null && password == null) return val str = (username ?: "") + ":" + (password ?: "") - val auth = str.encodeBase64() + val auth = str.toBase64() headers["Authorization"] = "Basic $auth" } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt index 2a0df092dbf2..b5de1bc19a50 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/HttpBearerAuth.kt @@ -1,9 +1,11 @@ package org.openapitools.client.auth +import org.openapitools.client.infrastructure.Queries + class HttpBearerAuth(private val scheme: String?) : Authentication { var bearerToken: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { val token: String = bearerToken ?: return headers["Authorization"] = (if (scheme != null) upperCaseBearer(scheme)!! + " " else "") + token } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt index 1c156c538ce2..1fcb9c77229c 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/auth/OAuth.kt @@ -1,9 +1,11 @@ package org.openapitools.client.auth +import org.openapitools.client.infrastructure.Queries + class OAuth : Authentication { var accessToken: String? = null - override fun apply(query: MutableMap?>, headers: MutableMap) { + override fun apply(queries: Queries, headers: MutableMap) { val token: String = accessToken ?: return headers["Authorization"] = "Bearer $token" } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt index ef7a8f1e1a62..f79709dfd560 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt @@ -1,7 +1,5 @@ package org.openapitools.client.infrastructure -typealias MultiValueMap = MutableMap> - fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) { "csv" -> "," "tsv" -> "\t" @@ -10,14 +8,40 @@ fun collectionDelimiter(collectionFormat: String) = when(collectionFormat) { else -> "" } -val defaultMultiValueConverter: (item: Any?) -> String = { item -> "$item" } +sealed class QueryParam { + data class Single(val value: String) : QueryParam() + data class Multi(val values: Iterable) : QueryParam() +} -fun toMultiValue(items: Array, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter) - = toMultiValue(items.asIterable(), collectionFormat, map) +class Queries(val queries: MutableMap = mutableMapOf()) { + // Single + fun add(name: String, value: String?) { + if (value != null) { + queries[name] = QueryParam.Single(value) + } + } + + fun add(name: String, value: Any?) { + if (value != null) { + queries[name] = QueryParam.Single(value.toString()) + } + } -fun toMultiValue(items: Iterable, collectionFormat: String, map: (item: T) -> String = defaultMultiValueConverter): List { - return when(collectionFormat) { - "multi" -> items.map(map) - else -> listOf(items.joinToString(separator = collectionDelimiter(collectionFormat), transform = map)) + // For Iterables + fun addMulti(name: String, values: Iterable, collectionFormat: String) { + val transformed = values.filterNotNull().map { it.toString() } + queries[name] = when (collectionFormat) { + "multi" -> QueryParam.Multi(transformed) + else -> QueryParam.Single(transformed.joinToString(separator = collectionDelimiter(collectionFormat))) + } } -} \ No newline at end of file + + // For Arrays + fun addMulti(name: String, values: Array, collectionFormat: String) = + addMulti(name, values.asIterable(), collectionFormat) + + // For Maps + fun addMap(values: Map) { + queries.putAll(values.filterValues { it != null }.mapValues { QueryParam.Single(it.value.toString()) }) + } +} diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt similarity index 94% rename from samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt rename to samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt index ef2d89ea9d55..d538747a02c1 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt @@ -20,12 +20,11 @@ import kotlinx.serialization.json.JsonConfiguration import org.openapitools.client.auth.* -open class ApiClient( +open class ApiClientBase( private val baseUrl: String, httpClientEngine: HttpClientEngine?, private val serializer: KotlinxSerializer ) { - constructor( baseUrl: String, httpClientEngine: HttpClientEngine?, @@ -33,7 +32,7 @@ open class ApiClient( ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) private val client: HttpClient by lazy { - val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClient.serializer } + val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClientBase.serializer } val clientConfig: (HttpClientConfig<*>) -> Unit = { it.install(JsonFeature, jsonConfig) } httpClientEngine?.let { HttpClient(it, clientConfig) } ?: HttpClient(clientConfig) } @@ -138,9 +137,12 @@ open class ApiClient( this.url { this.takeFrom(URLBuilder(baseUrl)) appendPath(requestConfig.path.trimStart('/').split('/')) - requestConfig.query.forEach { query -> - query.value?.forEach { value -> - parameter(query.key, value) + for ((name, value) in requestConfig.queries.queries) { + when (value) { + is QueryParam.Single -> parameter(name, value.value) + is QueryParam.Multi -> value.values.forEach { + parameter(name, it) + } } } } @@ -155,7 +157,7 @@ open class ApiClient( private fun RequestConfig.updateForAuth(authNames: List) { for (authName in authNames) { val auth = authentications[authName] ?: throw Exception("Authentication undefined: $authName") - auth.apply(query, headers) + auth.apply(queries, headers) } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt index 7f1ca724fa9f..e3583b9edfeb 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/RequestConfig.kt @@ -5,12 +5,12 @@ package org.openapitools.client.infrastructure * NOTE: This object doesn't include 'body' because it * allows for caching of the constructed object * for many request definitions. - * NOTE: Headers is a Map because rfc2616 defines + * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), - val query: MutableMap?> = mutableMapOf() + val queries: Queries = Queries() ) diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt new file mode 100644 index 000000000000..34af19afba5f --- /dev/null +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt @@ -0,0 +1,5 @@ +package org.openapitools.client.infrastructure + +import kotlinx.io.core.toByteArray + +fun String.toBase64() = toByteArray().encodeBase64() diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt index b3003f6e1604..559137b61575 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/ApiResponse.kt @@ -24,11 +24,11 @@ import kotlin.collections.* */ @Serializable data class ApiResponse( - @SerialName(value = "code") + @SerialName(value = "code") val code: kotlin.Int? = null, - @SerialName(value = "type") + @SerialName(value = "type") val type: kotlin.String? = null, - @SerialName(value = "message") + @SerialName(value = "message") val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt index 429dd6646ee6..34d23d1bbe6e 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Category.kt @@ -23,9 +23,9 @@ import kotlin.collections.* */ @Serializable data class Category( - @SerialName(value = "id") + @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "name") + @SerialName(value = "name") val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt index 13eaf0db4ae0..a82a581e7e8a 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Order.kt @@ -27,20 +27,20 @@ import kotlin.collections.* */ @Serializable data class Order( - @SerialName(value = "id") + @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "petId") + @SerialName(value = "petId") val petId: kotlin.Long? = null, - @SerialName(value = "quantity") + @SerialName(value = "quantity") val quantity: kotlin.Int? = null, - @SerialName(value = "shipDate") + @SerialName(value = "shipDate") val shipDate: kotlin.String? = null, /** * Order Status */ - @SerialName(value = "status") + @SerialName(value = "status") val status: Order.Status? = null, - @SerialName(value = "complete") + @SerialName(value = "complete") val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt index aa88e80b6ac1..53d66b54cae9 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Pet.kt @@ -35,16 +35,16 @@ data class Pet( @SerialName(value = "photoUrls") @Required val photoUrls: kotlin.collections.List, - @SerialName(value = "id") + @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "category") + @SerialName(value = "category") val category: Category? = null, - @SerialName(value = "tags") + @SerialName(value = "tags") val tags: kotlin.collections.List? = null, /** * pet status in the store */ - @SerialName(value = "status") + @SerialName(value = "status") val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt index 07f3f3751670..2aca7b098db0 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/Tag.kt @@ -23,9 +23,9 @@ import kotlin.collections.* */ @Serializable data class Tag( - @SerialName(value = "id") + @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "name") + @SerialName(value = "name") val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt index fe47feb98a4a..09cfe50c7f59 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/models/User.kt @@ -29,24 +29,24 @@ import kotlin.collections.* */ @Serializable data class User( - @SerialName(value = "id") + @SerialName(value = "id") val id: kotlin.Long? = null, - @SerialName(value = "username") + @SerialName(value = "username") val username: kotlin.String? = null, - @SerialName(value = "firstName") + @SerialName(value = "firstName") val firstName: kotlin.String? = null, - @SerialName(value = "lastName") + @SerialName(value = "lastName") val lastName: kotlin.String? = null, - @SerialName(value = "email") + @SerialName(value = "email") val email: kotlin.String? = null, - @SerialName(value = "password") + @SerialName(value = "password") val password: kotlin.String? = null, - @SerialName(value = "phone") + @SerialName(value = "phone") val phone: kotlin.String? = null, /** * User Status */ - @SerialName(value = "userStatus") + @SerialName(value = "userStatus") val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 87707bde443c..aad4f0e01f01 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* internal data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt index 2a9f9706f426..cb45a5cc7c39 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* internal data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt index 53124070fe65..86305c782846 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* internal data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt index e93a4f71be59..dd545eece845 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ internal data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt index e0bc38646b7b..295aeee71098 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* internal data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt index 3d19f0f6ceff..f0339f39c437 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* internal data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 6c517e812a31..4449603d2bc0 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -26,13 +26,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt index 9e3a630aff28..9cd04452a72c 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt index cc54ab1c2a65..ccd49c6145ba 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -29,25 +29,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt index 2268e104bd1d..28cb9742ec20 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -35,19 +35,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt index 7b25720b83bd..2670c541fbb6 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt index e4732851b0c3..4f2256930bff 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/models/User.kt @@ -31,31 +31,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 36db4bcb996f..2f46a69fd3ef 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt index 653069f5198b..e7fe5b524430 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt index bf6fb8a4d2cc..63853cde7b09 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt index e800cb5f94f6..fe32421ec09c 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt index f8b04268ae3d..d7b7334c9b2c 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt index a8efdaeb5fe0..faa11fc9e716 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 36db4bcb996f..2f46a69fd3ef 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt index 653069f5198b..e7fe5b524430 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt index bf6fb8a4d2cc..63853cde7b09 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt index e800cb5f94f6..fe32421ec09c 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt index f8b04268ae3d..d7b7334c9b2c 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt index a8efdaeb5fe0..faa11fc9e716 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 36db4bcb996f..2f46a69fd3ef 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt index 653069f5198b..e7fe5b524430 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt index bf6fb8a4d2cc..63853cde7b09 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt index e800cb5f94f6..fe32421ec09c 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt index f8b04268ae3d..d7b7334c9b2c 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt index a8efdaeb5fe0..faa11fc9e716 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 6c517e812a31..4449603d2bc0 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -26,13 +26,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt index 9e3a630aff28..9cd04452a72c 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt index 76b50c94e985..bdb011f6c787 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -29,25 +29,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: kotlin.String? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index 8e5fb9696c12..388b62b62905 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -31,23 +31,19 @@ import kotlin.collections.* data class Pet( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "name") val name: kotlin.String, @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt index 7b25720b83bd..2670c541fbb6 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt index e4732851b0c3..4f2256930bff 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/models/User.kt @@ -31,31 +31,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 36db4bcb996f..2f46a69fd3ef 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -25,13 +25,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt index 653069f5198b..e7fe5b524430 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt index c6dc56633d58..a4ad6377b698 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -28,25 +28,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: org.threeten.bp.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) { diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt index e800cb5f94f6..fe32421ec09c 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -34,19 +34,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) { diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt index f8b04268ae3d..d7b7334c9b2c 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -24,10 +24,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt index a8efdaeb5fe0..faa11fc9e716 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/models/User.kt @@ -30,31 +30,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index 6c517e812a31..4449603d2bc0 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -26,13 +26,10 @@ import kotlin.collections.* data class ApiResponse( @Json(name = "code") - val code: kotlin.Int? = null, @Json(name = "type") - val type: kotlin.String? = null, @Json(name = "message") - val message: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt index 9e3a630aff28..9cd04452a72c 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Category( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt index cc54ab1c2a65..ccd49c6145ba 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -29,25 +29,19 @@ import kotlin.collections.* data class Order( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "petId") - val petId: kotlin.Long? = null, @Json(name = "quantity") - val quantity: kotlin.Int? = null, @Json(name = "shipDate") - val shipDate: java.time.OffsetDateTime? = null, /** * Order Status */ @Json(name = "status") - val status: Order.Status? = null, @Json(name = "complete") - val complete: kotlin.Boolean? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt index 2268e104bd1d..28cb9742ec20 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -35,19 +35,15 @@ data class Pet( @Json(name = "photoUrls") val photoUrls: kotlin.collections.List, @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "category") - val category: Category? = null, @Json(name = "tags") - val tags: kotlin.collections.List? = null, /** * pet status in the store */ @Json(name = "status") - val status: Pet.Status? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt index 7b25720b83bd..2670c541fbb6 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -25,10 +25,8 @@ import kotlin.collections.* data class Tag( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "name") - val name: kotlin.String? = null ) : Serializable { companion object { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt index e4732851b0c3..4f2256930bff 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/models/User.kt @@ -31,31 +31,23 @@ import kotlin.collections.* data class User( @Json(name = "id") - val id: kotlin.Long? = null, @Json(name = "username") - val username: kotlin.String? = null, @Json(name = "firstName") - val firstName: kotlin.String? = null, @Json(name = "lastName") - val lastName: kotlin.String? = null, @Json(name = "email") - val email: kotlin.String? = null, @Json(name = "password") - val password: kotlin.String? = null, @Json(name = "phone") - val phone: kotlin.String? = null, /** * User Status */ @Json(name = "userStatus") - val userStatus: kotlin.Int? = null ) : Serializable { companion object { From 041924a8f4488668b6538eb53a0d41be8f739f0f Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Thu, 13 Aug 2020 09:57:02 +0200 Subject: [PATCH 5/8] Revert changes on request parameterization --- .../kotlin-client/libraries/multiplatform/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache index a3a6b2aac608..dacc75e9b177 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache @@ -93,7 +93,7 @@ import kotlinx.serialization.builtins.serializer val config_ = RequestConfig( RequestMethod.{{httpMethod}}, - "{{path}}"{{#pathParams}}.replace("{{curly true}}{{baseName}}{{curly}}", "${{{paramName}}}"){{/pathParams}}, + "{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{{paramName}}}"){{/pathParams}}, queries = queries_, headers = headers_ ) From b2c1548857ab6a28c2635b1ae3b10260f845d649 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Sun, 30 Aug 2020 00:09:15 +0200 Subject: [PATCH 6/8] Upgraded to Kotlin 1.4 and fixed minor issues --- .../languages/KotlinClientCodegen.java | 2 +- .../multiplatform/ApiClient.kt.mustache | 86 ++++++++++++++++++- .../libraries/multiplatform/api.mustache | 73 ++++++++-------- .../multiplatform/build.gradle.kts.mustache | 29 +++---- .../ApiAbstractions.kt.mustache | 4 + .../infrastructure/ApiClientBase.kt.mustache | 9 +- .../Base64ByteArray.kt.mustache | 23 +++-- .../infrastructure/Bytes.kt.mustache | 2 +- .../infrastructure/OctetByteArray.kt.mustache | 16 ++-- .../infrastructure/encoding.kt.mustache | 4 +- .../serial_wrapper_request_list.mustache | 14 +-- .../serial_wrapper_response_list.mustache | 14 +-- 12 files changed, 180 insertions(+), 96 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 39a6a7ab5454..f376392238aa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -526,7 +526,7 @@ private void processMultiplatformLibrary(final String infrastructureFolder) { typeMapping.put("object", "kotlin.String"); // kotlin.Any not serializable // multiplatform import mapping - importMapping.put("BigDecimal", "Double"); + importMapping.put("BigDecimal", "kotlin.Double"); importMapping.put("UUID", "kotlin.String"); importMapping.put("URI", "kotlin.String"); importMapping.put("InputProvider", "io.ktor.client.request.forms.InputProvider"); diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache index 604e73132d8c..a2d303780706 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/ApiClient.kt.mustache @@ -1,17 +1,95 @@ package {{packageName}} import io.ktor.client.engine.HttpClientEngine -import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.json.Json import {{packageName}}.apis.* +import {{packageName}}.infrastructure.ApiClientBase -class ApiClient( +{{#nonPublicApi}}internal {{/nonPublicApi}}class ApiClient( baseUrl: String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable + json: Json = Json {} ) { + {{! TODO: Remove backticks when conflicts are resolved }} {{#apiInfo}} {{#apis}} - val {{{classVarName}}} = {{{classFilename}}}(baseUrl, httpClientEngine, jsonConfiguration) + val `{{{classVarName}}}` = {{{classFilename}}}(baseUrl, httpClientEngine, json) {{/apis}} {{/apiInfo}} + + val allClients: Set = setOf( + {{#apiInfo}} + {{#apis}} + `{{{classVarName}}}`, + {{/apis}} + {{/apiInfo}} + ) + + /** + * Set the username for the first HTTP basic authentication for all apis. + * + * @param username Username + */ + fun setUsername(username: String) { + for (client in allClients) { + client.setUsername(username) + } + } + + /** + * Set the password for the first HTTP basic authentication for all apis. + * + * @param password Password + */ + fun setPassword(password: String) { + for (client in allClients) { + client.setPassword(password) + } + } + + /** + * Set the API key value for the first API key authentication for all apis. + * + * @param apiKey API key + * @param paramName The name of the API key parameter, or null or set the first key. + */ + fun setApiKey(apiKey: String, paramName: String? = null) { + for (client in allClients) { + client.setApiKey(apiKey, paramName) + } + } + + /** + * Set the API key prefix for the first API key authentication for all apis. + * + * @param apiKeyPrefix API key prefix + * @param paramName The name of the API key parameter, or null or set the first key. + */ + fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) { + for (client in allClients) { + client.setApiKeyPrefix(apiKeyPrefix, paramName) + } + } + + /** + * Set the access token for the first OAuth2 authentication for all apis. + * + * @param accessToken Access token + */ + fun setAccessToken(accessToken: String) { + for (client in allClients) { + client.setAccessToken(accessToken) + } + } + + /** + * Set the access token for the first Bearer authentication for all apis. + * + * @param bearerToken The bearer token. + */ + fun setBearerToken(bearerToken: String) { + for (client in allClients) { + client.setBearerToken(bearerToken) + } + } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache index dacc75e9b177..45f81b639a2c 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/api.mustache @@ -7,27 +7,26 @@ package {{apiPackage}} import {{packageName}}.infrastructure.* import io.ktor.client.request.forms.formData import io.ktor.client.engine.HttpClientEngine -import io.ktor.client.features.json.serializer.KotlinxSerializer import io.ktor.client.request.forms.FormPart +import io.ktor.client.utils.EmptyContent import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.list import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder {{#operations}} {{#nonPublicApi}}internal {{/nonPublicApi}}class {{classname}} constructor( baseUrl: kotlin.String = "{{{basePath}}}", httpClientEngine: HttpClientEngine? = null, - serializer: KotlinxSerializer -) : ApiClientBase(baseUrl, httpClientEngine, serializer) { - constructor( - baseUrl: String = "{{{basePath}}}", - httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - + json: Json = Json {}, +) : ApiClientBase(baseUrl, httpClientEngine, json) { {{#operation}} /** * {{summary}} @@ -44,9 +43,9 @@ import kotlinx.serialization.builtins.serializer {{/allParams}} ): HttpResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}> { {{! TODO: Optimize all the ?.let to only the places where it's needed }} - val authNames_ = listOf({{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}) + val authNamesOag = listOf({{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}) - val body_ = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}{{^isList}}.asList(){{/isList}}){{^required}} }{{/required}}{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}){{^required}} }{{/required}}{{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} + val bodyOag = {{#hasBodyParam}}{{#bodyParam}}{{#isListContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}{{^isList}}.asList(){{/isList}}){{^required}} }{{/required}}{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}{{^required}}{{{paramName}}}?.let { {{/required}}{{operationIdCamelCase}}Request({{{paramName}}}){{^required}} }{{/required}}{{/isMapContainer}}{{^isMapContainer}}{{{paramName}}}{{/isMapContainer}}{{/isListContainer}}{{/bodyParam}}{{/hasBodyParam}} {{^hasBodyParam}} {{#hasFormParams}} {{#isMultipart}} @@ -65,43 +64,43 @@ import kotlinx.serialization.builtins.serializer {{/isMultipart}} {{/hasFormParams}} {{^hasFormParams}} - io.ktor.client.utils.EmptyContent + EmptyContent {{/hasFormParams}} {{/hasBodyParam}} - {{! TODO: Don't use all the listOf() }} - val queries_ = Queries() - {{#queryParams}} - {{#isContainer}} - {{#isMapContainer}} - {{^required}}if ({{{paramName}}} != null) {{/required}}queries_.addMap({{{paramName}}}) - {{/isMapContainer}} - {{^isMapContainer}} - {{^required}}if ({{{paramName}}} != null) {{/required}}queries_.addMulti("{{baseName}}", {{{paramName}}}, "{{collectionFormat}}") - {{/isMapContainer}} - {{/isContainer}} - {{^isContainer}} - queries_.add("{{baseName}}", {{{paramName}}}) - {{/isContainer}} - {{/queryParams}} + val queriesOag = Queries { + {{#queryParams}} + {{#isContainer}} + {{#isMapContainer}} + {{^required}}if ({{{paramName}}} != null) {{/required}}addMap({{{paramName}}}) + {{/isMapContainer}} + {{^isMapContainer}} + {{^required}}if ({{{paramName}}} != null) {{/required}}addMulti("{{baseName}}", {{{paramName}}}, "{{collectionFormat}}") + {{/isMapContainer}} + {{/isContainer}} + {{^isContainer}} + add("{{baseName}}", {{{paramName}}}) + {{/isContainer}} + {{/queryParams}} + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( {{#headerParams}} "{{baseName}}" to {{#isContainer}}{{{paramName}}}?.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this?.toString(){{/isContainer}}{{#hasMore}},{{/hasMore}} {{/headerParams}} ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.{{httpMethod}}, - "{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", "${{{paramName}}}"){{/pathParams}}, - queries = queries_, - headers = headers_ + "{{path}}"{{#pathParams}}.replace("{" + "{{baseName}}" + "}", {{{paramName}}}.toString()){{/pathParams}}, + queries = queriesOag, + headers = headersOag ) return {{#hasBodyParam}}jsonRequest{{/hasBodyParam}}{{^hasBodyParam}}{{#hasFormParams}}{{#isMultipart}}multipartFormRequest{{/isMultipart}}{{^isMultipart}}urlEncodedFormRequest{{/isMultipart}}{{/hasFormParams}}{{^hasFormParams}}request{{/hasFormParams}}{{/hasBodyParam}}( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).{{#isListContainer}}wrap<{{operationIdCamelCase}}Response>().map { value{{^isList}}.toTypedArray(){{/isList}} }{{/isListContainer}}{{^isListContainer}}{{#isMapContainer}}wrap<{{operationIdCamelCase}}Response>().map { value }{{/isMapContainer}}{{^isMapContainer}}wrap(){{/isMapContainer}}{{/isListContainer}} } {{#hasBodyParam}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache index 49689446d708..863decf65625 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/build.gradle.kts.mustache @@ -1,13 +1,12 @@ plugins { - kotlin("multiplatform") version "1.3.72" - kotlin("plugin.serialization") version "1.3.72" + kotlin("multiplatform") version "1.4.0" + kotlin("plugin.serialization") version "1.4.0" } group = "{{groupId}}" version = "{{artifactVersion}}" -val ktorVersion = "1.3.2" -val kotlinxIoVersion = "0.1.16" +val ktorVersion = "1.4.0" repositories { jcenter() @@ -33,7 +32,10 @@ kotlin { } } } - js() + js(BOTH) { + browser() + nodejs() + } sourceSets { val commonMain by getting { @@ -41,7 +43,6 @@ kotlin { dependencies { implementation(kotlin("stdlib-common")) - implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinxIoVersion") api("io.ktor:ktor-client-core:$ktorVersion") api("io.ktor:ktor-client-json:$ktorVersion") api("io.ktor:ktor-client-serialization:$ktorVersion") @@ -63,10 +64,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) - implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:$kotlinxIoVersion") api("io.ktor:ktor-client-core-jvm:$ktorVersion") - api("io.ktor:ktor-client-json-jvm:$ktorVersion") - api("io.ktor:ktor-client-serialization-jvm:$ktorVersion") } } @@ -77,6 +75,7 @@ kotlin { implementation(kotlin("test")) implementation(kotlin("test-junit5")) implementation("org.junit.jupiter:junit-jupiter:5.6.2") + implementation("io.ktor:ktor-client-apache:$ktorVersion") implementation("io.ktor:ktor-client-mock-jvm:$ktorVersion") } } @@ -86,10 +85,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-native")) - implementation("org.jetbrains.kotlinx:kotlinx-io-native:$kotlinxIoVersion") api("io.ktor:ktor-client-ios:$ktorVersion") - api("io.ktor:ktor-client-json-native:$ktorVersion") - api("io.ktor:ktor-client-serialization-native:$ktorVersion") } } @@ -106,10 +102,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-js")) - implementation("org.jetbrains.kotlinx:kotlinx-io-js:$kotlinxIoVersion") api("io.ktor:ktor-client-js:$ktorVersion") - api("io.ktor:ktor-client-json-js:$ktorVersion") - api("io.ktor:ktor-client-serialization-js:$ktorVersion") } } @@ -122,3 +115,9 @@ kotlin { } } } + +tasks { + named("jvmTest") { + useJUnitPlatform() + } +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache index 1197ae8c7e2f..36f44ff217f4 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiAbstractions.kt.mustache @@ -14,6 +14,10 @@ package {{packageName}}.infrastructure } {{#nonPublicApi}}internal {{/nonPublicApi}}class Queries(val queries: MutableMap = mutableMapOf()) { + constructor(queries: MutableMap = mutableMapOf(), config: Queries.() -> Unit): this(queries) { + config(this) + } + // Single fun add(name: String, value: String?) { if (value != null) { diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache index 8bf5368dff8f..cf2c444566fb 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClientBase.kt.mustache @@ -16,20 +16,15 @@ import io.ktor.http.* import io.ktor.http.content.OutgoingContent import io.ktor.http.content.PartData import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import {{packageName}}.auth.* {{#nonPublicApi}}internal {{/nonPublicApi}}open class ApiClientBase( private val baseUrl: String, httpClientEngine: HttpClientEngine?, - private val serializer: KotlinxSerializer + json: Json = Json {} ) { - constructor( - baseUrl: String, - httpClientEngine: HttpClientEngine?, - jsonConfiguration: JsonConfiguration - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) + private val serializer = KotlinxSerializer(json) private val client: HttpClient by lazy { val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClientBase.serializer } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache index 14ff8ddf45d8..d8042c19f764 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Base64ByteArray.kt.mustache @@ -1,14 +1,21 @@ package {{packageName}}.infrastructure -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder -@Serializable -class Base64ByteArray(val value: ByteArray) { - @Serializer(Base64ByteArray::class) +@Serializable(with = Base64ByteArray.Companion::class) +{{#nonPublicApi}}internal {{/nonPublicApi}}class Base64ByteArray(val value: ByteArray) { companion object : KSerializer { - override val descriptor = PrimitiveDescriptor("Base64ByteArray", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: Base64ByteArray) = encoder.encodeString(value.value.encodeBase64()) - override fun deserialize(decoder: Decoder) = Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) + override val descriptor = PrimitiveSerialDescriptor("Base64ByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: Base64ByteArray): Unit = + encoder.encodeString(value.value.encodeBase64()) + + override fun deserialize(decoder: Decoder): Base64ByteArray = + Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) } override fun equals(other: Any?): Boolean { @@ -25,4 +32,4 @@ class Base64ByteArray(val value: ByteArray) { override fun toString(): String { return "Base64ByteArray(${hex(value)})" } -} \ No newline at end of file +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache index dc30e36dcc16..7cd7d14721db 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/Bytes.kt.mustache @@ -32,7 +32,7 @@ internal fun hex(bytes: ByteArray): String { result[resultIndex++] = digits[b and 0x0f] } - return String(result) + return result.concatToString() } /** diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache index 3ba3b74be0c0..d6c10d8e5163 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/OctetByteArray.kt.mustache @@ -1,12 +1,16 @@ package {{packageName}}.infrastructure -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder -@Serializable -class OctetByteArray(val value: ByteArray) { - @Serializer(OctetByteArray::class) +@Serializable(with = OctetByteArray.Companion::class) +{{#nonPublicApi}}internal {{/nonPublicApi}}class OctetByteArray(val value: ByteArray) { companion object : KSerializer { - override val descriptor = PrimitiveDescriptor("OctetByteArray", PrimitiveKind.STRING) + override val descriptor = PrimitiveSerialDescriptor("OctetByteArray", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: OctetByteArray) = encoder.encodeString(hex(value.value)) override fun deserialize(decoder: Decoder) = OctetByteArray(hex(decoder.decodeString())) } @@ -25,4 +29,4 @@ class OctetByteArray(val value: ByteArray) { override fun toString(): String { return "OctetByteArray(${hex(value)})" } -} \ No newline at end of file +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache index 1fddae2868f0..2ec8b39e3532 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/encoding.kt.mustache @@ -1,5 +1,3 @@ package {{packageName}}.infrastructure -import kotlinx.io.core.toByteArray - -fun String.toBase64() = toByteArray().encodeBase64() +fun String.toBase64() = encodeToByteArray().encodeBase64() diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache index d637b98683bd..c387cdcaa186 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_request_list.mustache @@ -1,13 +1,13 @@ - @Serializable + @Serializable(with = {{operationIdCamelCase}}Request.Companion::class) private class {{operationIdCamelCase}}Request(val value: List<{{#bodyParam}}{{baseType}}{{/bodyParam}}>) { - @Serializer({{operationIdCamelCase}}Request::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Request> { - private val serializer = {{#bodyParam}}{{baseType}}{{/bodyParam}}.serializer().list - override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Request", PrimitiveKind.STRING) + private val serializer = ListSerializer({{#bodyParam}}{{baseType}}{{/bodyParam}}.serializer()) + override val descriptor = PrimitiveSerialDescriptor("{{operationIdCamelCase}}Request", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request) = + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Request): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): {{operationIdCamelCase}}Request = + {{operationIdCamelCase}}Request(serializer.deserialize(decoder)) } - } \ No newline at end of file + } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache index c3ba3adce3d1..b12a8a184346 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/serial_wrapper_response_list.mustache @@ -1,13 +1,13 @@ - @Serializable + @Serializable(with = {{operationIdCamelCase}}Response.Companion::class) private class {{operationIdCamelCase}}Response(val value: List<{{returnBaseType}}>) { - @Serializer({{operationIdCamelCase}}Response::class) {{#nonPublicApi}}internal {{/nonPublicApi}}companion object : KSerializer<{{operationIdCamelCase}}Response> { - private val serializer = {{returnBaseType}}.serializer().list - override val descriptor = PrimitiveDescriptor("{{operationIdCamelCase}}Response", PrimitiveKind.STRING) + private val serializer = ListSerializer({{returnBaseType}}.serializer()) + override val descriptor = PrimitiveSerialDescriptor("{{operationIdCamelCase}}Response", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response) = + override fun serialize(encoder: Encoder, value: {{operationIdCamelCase}}Response): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): {{operationIdCamelCase}}Response = + {{operationIdCamelCase}}Response(serializer.deserialize(decoder)) } - } \ No newline at end of file + } From aababfb32730d01c801b3d9185a4fd3dc32414ce Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Sun, 30 Aug 2020 01:46:36 +0200 Subject: [PATCH 7/8] Updated sample --- .../kotlin-multiplatform/build.gradle.kts | 29 ++- .../main/org/openapitools/client/ApiClient.kt | 85 ++++++- .../org/openapitools/client/apis/PetApi.kt | 235 +++++++++--------- .../org/openapitools/client/apis/StoreApi.kt | 115 ++++----- .../org/openapitools/client/apis/UserApi.kt | 233 ++++++++--------- .../client/infrastructure/ApiAbstractions.kt | 4 + .../client/infrastructure/ApiClientBase.kt | 9 +- .../client/infrastructure/Base64ByteArray.kt | 21 +- .../client/infrastructure/Bytes.kt | 2 +- .../client/infrastructure/OctetByteArray.kt | 14 +- .../client/infrastructure/encoding.kt | 4 +- 11 files changed, 427 insertions(+), 324 deletions(-) diff --git a/samples/client/petstore/kotlin-multiplatform/build.gradle.kts b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts index eff454c582b3..67d8bdfbeb9b 100644 --- a/samples/client/petstore/kotlin-multiplatform/build.gradle.kts +++ b/samples/client/petstore/kotlin-multiplatform/build.gradle.kts @@ -1,13 +1,12 @@ plugins { - kotlin("multiplatform") version "1.3.72" - kotlin("plugin.serialization") version "1.3.72" + kotlin("multiplatform") version "1.4.0" + kotlin("plugin.serialization") version "1.4.0" } group = "org.openapitools" version = "1.0.0" -val ktorVersion = "1.3.2" -val kotlinxIoVersion = "0.1.16" +val ktorVersion = "1.4.0" repositories { jcenter() @@ -33,7 +32,10 @@ kotlin { } } } - js() + js(BOTH) { + browser() + nodejs() + } sourceSets { val commonMain by getting { @@ -41,7 +43,6 @@ kotlin { dependencies { implementation(kotlin("stdlib-common")) - implementation("org.jetbrains.kotlinx:kotlinx-io:$kotlinxIoVersion") api("io.ktor:ktor-client-core:$ktorVersion") api("io.ktor:ktor-client-json:$ktorVersion") api("io.ktor:ktor-client-serialization:$ktorVersion") @@ -63,10 +64,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) - implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:$kotlinxIoVersion") api("io.ktor:ktor-client-core-jvm:$ktorVersion") - api("io.ktor:ktor-client-json-jvm:$ktorVersion") - api("io.ktor:ktor-client-serialization-jvm:$ktorVersion") } } @@ -77,6 +75,7 @@ kotlin { implementation(kotlin("test")) implementation(kotlin("test-junit5")) implementation("org.junit.jupiter:junit-jupiter:5.6.2") + implementation("io.ktor:ktor-client-apache:$ktorVersion") implementation("io.ktor:ktor-client-mock-jvm:$ktorVersion") } } @@ -86,10 +85,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-native")) - implementation("org.jetbrains.kotlinx:kotlinx-io-native:$kotlinxIoVersion") api("io.ktor:ktor-client-ios:$ktorVersion") - api("io.ktor:ktor-client-json-native:$ktorVersion") - api("io.ktor:ktor-client-serialization-native:$ktorVersion") } } @@ -106,10 +102,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-js")) - implementation("org.jetbrains.kotlinx:kotlinx-io-js:$kotlinxIoVersion") api("io.ktor:ktor-client-js:$ktorVersion") - api("io.ktor:ktor-client-json-js:$ktorVersion") - api("io.ktor:ktor-client-serialization-js:$ktorVersion") } } @@ -122,3 +115,9 @@ kotlin { } } } + +tasks { + named("jvmTest") { + useJUnitPlatform() + } +} diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt index 04bb940f5f49..6a75c16160a0 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/ApiClient.kt @@ -1,15 +1,90 @@ package org.openapitools.client import io.ktor.client.engine.HttpClientEngine -import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.json.Json import org.openapitools.client.apis.* +import org.openapitools.client.infrastructure.ApiClientBase class ApiClient( baseUrl: String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable + json: Json = Json {} ) { - val pet = PetApi(baseUrl, httpClientEngine, jsonConfiguration) - val store = StoreApi(baseUrl, httpClientEngine, jsonConfiguration) - val user = UserApi(baseUrl, httpClientEngine, jsonConfiguration) + val `pet` = PetApi(baseUrl, httpClientEngine, json) + val `store` = StoreApi(baseUrl, httpClientEngine, json) + val `user` = UserApi(baseUrl, httpClientEngine, json) + + val allClients: Set = setOf( + `pet`, + `store`, + `user`, + ) + + /** + * Set the username for the first HTTP basic authentication for all apis. + * + * @param username Username + */ + fun setUsername(username: String) { + for (client in allClients) { + client.setUsername(username) + } + } + + /** + * Set the password for the first HTTP basic authentication for all apis. + * + * @param password Password + */ + fun setPassword(password: String) { + for (client in allClients) { + client.setPassword(password) + } + } + + /** + * Set the API key value for the first API key authentication for all apis. + * + * @param apiKey API key + * @param paramName The name of the API key parameter, or null or set the first key. + */ + fun setApiKey(apiKey: String, paramName: String? = null) { + for (client in allClients) { + client.setApiKey(apiKey, paramName) + } + } + + /** + * Set the API key prefix for the first API key authentication for all apis. + * + * @param apiKeyPrefix API key prefix + * @param paramName The name of the API key parameter, or null or set the first key. + */ + fun setApiKeyPrefix(apiKeyPrefix: String, paramName: String? = null) { + for (client in allClients) { + client.setApiKeyPrefix(apiKeyPrefix, paramName) + } + } + + /** + * Set the access token for the first OAuth2 authentication for all apis. + * + * @param accessToken Access token + */ + fun setAccessToken(accessToken: String) { + for (client in allClients) { + client.setAccessToken(accessToken) + } + } + + /** + * Set the access token for the first Bearer authentication for all apis. + * + * @param bearerToken The bearer token. + */ + fun setBearerToken(bearerToken: String) { + for (client in allClients) { + client.setBearerToken(bearerToken) + } + } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt index 401b6374c0e3..14bfb6665452 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/PetApi.kt @@ -17,26 +17,25 @@ import org.openapitools.client.models.Pet import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData import io.ktor.client.engine.HttpClientEngine -import io.ktor.client.features.json.serializer.KotlinxSerializer import io.ktor.client.request.forms.FormPart +import io.ktor.client.utils.EmptyContent import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.list import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder class PetApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - serializer: KotlinxSerializer -) : ApiClientBase(baseUrl, httpClientEngine, serializer) { - constructor( - baseUrl: String = "http://petstore.swagger.io/v2", - httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - + json: Json = Json {}, +) : ApiClientBase(baseUrl, httpClientEngine, json) { /** * Add a new pet to the store * @@ -46,26 +45,27 @@ class PetApi constructor( suspend fun addPet( body: Pet ): HttpResponse { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = body + val bodyOag = body - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, "/pet", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } @@ -81,28 +81,29 @@ class PetApi constructor( petId: kotlin.Long, apiKey: kotlin.String? = null ): HttpResponse { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( "api_key" to this?.toString() ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.DELETE, - "/pet/{petId}".replace("petId", "$petId"), - queries = queries_, - headers = headers_ + "/pet/{petId}".replace("{" + "petId" + "}", petId.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -115,43 +116,45 @@ class PetApi constructor( suspend fun findPetsByStatus( status: kotlin.collections.List ): HttpResponse> { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() - queries_.addMulti("status", status, "csv") + val queriesOag = Queries { + addMulti("status", status, "csv") + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, "/pet/findByStatus", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap().map { value } } - @Serializable + @Serializable(with = FindPetsByStatusResponse.Companion::class) private class FindPetsByStatusResponse(val value: List) { - @Serializer(FindPetsByStatusResponse::class) companion object : KSerializer { - private val serializer = Pet.serializer().list - override val descriptor = PrimitiveDescriptor("FindPetsByStatusResponse", PrimitiveKind.STRING) + private val serializer = ListSerializer(Pet.serializer()) + override val descriptor = PrimitiveSerialDescriptor("FindPetsByStatusResponse", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: FindPetsByStatusResponse) = + override fun serialize(encoder: Encoder, value: FindPetsByStatusResponse): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = FindPetsByStatusResponse(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): FindPetsByStatusResponse = + FindPetsByStatusResponse(serializer.deserialize(decoder)) } } + /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. @@ -162,43 +165,45 @@ class PetApi constructor( suspend fun findPetsByTags( tags: kotlin.collections.List ): HttpResponse> { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() - queries_.addMulti("tags", tags, "csv") + val queriesOag = Queries { + addMulti("tags", tags, "csv") + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, "/pet/findByTags", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap().map { value } } - @Serializable + @Serializable(with = FindPetsByTagsResponse.Companion::class) private class FindPetsByTagsResponse(val value: List) { - @Serializer(FindPetsByTagsResponse::class) companion object : KSerializer { - private val serializer = Pet.serializer().list - override val descriptor = PrimitiveDescriptor("FindPetsByTagsResponse", PrimitiveKind.STRING) + private val serializer = ListSerializer(Pet.serializer()) + override val descriptor = PrimitiveSerialDescriptor("FindPetsByTagsResponse", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: FindPetsByTagsResponse) = + override fun serialize(encoder: Encoder, value: FindPetsByTagsResponse): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = FindPetsByTagsResponse(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): FindPetsByTagsResponse = + FindPetsByTagsResponse(serializer.deserialize(decoder)) } } + /** * Find pet by ID * Returns a single pet @@ -209,27 +214,28 @@ class PetApi constructor( suspend fun getPetById( petId: kotlin.Long ): HttpResponse { - val authNames_ = listOf("api_key") + val authNamesOag = listOf("api_key") - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, - "/pet/{petId}".replace("petId", "$petId"), - queries = queries_, - headers = headers_ + "/pet/{petId}".replace("{" + "petId" + "}", petId.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -241,26 +247,27 @@ class PetApi constructor( suspend fun updatePet( body: Pet ): HttpResponse { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = body + val bodyOag = body - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.PUT, "/pet", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } @@ -278,30 +285,31 @@ class PetApi constructor( name: kotlin.String? = null, status: kotlin.String? = null ): HttpResponse { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = + val bodyOag = ParametersBuilder().also { name?.apply { it.append("name", name.toString()) } status?.apply { it.append("status", status.toString()) } }.build() - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, - "/pet/{petId}".replace("petId", "$petId"), - queries = queries_, - headers = headers_ + "/pet/{petId}".replace("{" + "petId" + "}", petId.toString()), + queries = queriesOag, + headers = headersOag ) return urlEncodedFormRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -318,30 +326,31 @@ class PetApi constructor( additionalMetadata: kotlin.String? = null, file: io.ktor.client.request.forms.InputProvider? = null ): HttpResponse { - val authNames_ = listOf("petstore_auth") + val authNamesOag = listOf("petstore_auth") - val body_ = + val bodyOag = formData { additionalMetadata?.let { append(FormPart("additionalMetadata", additionalMetadata)) } file?.let { append(FormPart("file", file)) } } - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, - "/pet/{petId}/uploadImage".replace("petId", "$petId"), - queries = queries_, - headers = headers_ + "/pet/{petId}/uploadImage".replace("{" + "petId" + "}", petId.toString()), + queries = queriesOag, + headers = headersOag ) return multipartFormRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt index 865b44a5012f..71017f5322ba 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/StoreApi.kt @@ -16,26 +16,25 @@ import org.openapitools.client.models.Order import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData import io.ktor.client.engine.HttpClientEngine -import io.ktor.client.features.json.serializer.KotlinxSerializer import io.ktor.client.request.forms.FormPart +import io.ktor.client.utils.EmptyContent import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.list import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder class StoreApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - serializer: KotlinxSerializer -) : ApiClientBase(baseUrl, httpClientEngine, serializer) { - constructor( - baseUrl: String = "http://petstore.swagger.io/v2", - httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - + json: Json = Json {}, +) : ApiClientBase(baseUrl, httpClientEngine, json) { /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors @@ -45,27 +44,28 @@ class StoreApi constructor( suspend fun deleteOrder( orderId: kotlin.String ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.DELETE, - "/store/order/{orderId}".replace("orderId", "$orderId"), - queries = queries_, - headers = headers_ + "/store/order/{orderId}".replace("{" + "orderId" + "}", orderId.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -76,27 +76,28 @@ class StoreApi constructor( @Suppress("UNCHECKED_CAST") suspend fun getInventory( ): HttpResponse> { - val authNames_ = listOf("api_key") + val authNamesOag = listOf("api_key") - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, "/store/inventory", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap().map { value } } @Serializable @@ -119,27 +120,28 @@ class StoreApi constructor( suspend fun getOrderById( orderId: kotlin.Long ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, - "/store/order/{orderId}".replace("orderId", "$orderId"), - queries = queries_, - headers = headers_ + "/store/order/{orderId}".replace("{" + "orderId" + "}", orderId.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -152,26 +154,27 @@ class StoreApi constructor( suspend fun placeOrder( body: Order ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = body + val bodyOag = body - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, "/store/order", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt index 5ea1dd47c931..1743a993b8b3 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/apis/UserApi.kt @@ -16,26 +16,25 @@ import org.openapitools.client.models.User import org.openapitools.client.infrastructure.* import io.ktor.client.request.forms.formData import io.ktor.client.engine.HttpClientEngine -import io.ktor.client.features.json.serializer.KotlinxSerializer import io.ktor.client.request.forms.FormPart +import io.ktor.client.utils.EmptyContent import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import io.ktor.http.ParametersBuilder -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.list import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder class UserApi constructor( baseUrl: kotlin.String = "http://petstore.swagger.io/v2", httpClientEngine: HttpClientEngine? = null, - serializer: KotlinxSerializer -) : ApiClientBase(baseUrl, httpClientEngine, serializer) { - constructor( - baseUrl: String = "http://petstore.swagger.io/v2", - httpClientEngine: HttpClientEngine? = null, - jsonConfiguration: JsonConfiguration = JsonConfiguration.Stable - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) - + json: Json = Json {}, +) : ApiClientBase(baseUrl, httpClientEngine, json) { /** * Create user * This can only be done by the logged in user. @@ -45,26 +44,27 @@ class UserApi constructor( suspend fun createUser( body: User ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = body + val bodyOag = body - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, "/user", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } @@ -78,42 +78,44 @@ class UserApi constructor( suspend fun createUsersWithArrayInput( body: kotlin.collections.List ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = CreateUsersWithArrayInputRequest(body) + val bodyOag = CreateUsersWithArrayInputRequest(body) - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, "/user/createWithArray", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } - @Serializable + @Serializable(with = CreateUsersWithArrayInputRequest.Companion::class) private class CreateUsersWithArrayInputRequest(val value: List) { - @Serializer(CreateUsersWithArrayInputRequest::class) companion object : KSerializer { - private val serializer = User.serializer().list - override val descriptor = PrimitiveDescriptor("CreateUsersWithArrayInputRequest", PrimitiveKind.STRING) + private val serializer = ListSerializer(User.serializer()) + override val descriptor = PrimitiveSerialDescriptor("CreateUsersWithArrayInputRequest", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: CreateUsersWithArrayInputRequest) = + override fun serialize(encoder: Encoder, value: CreateUsersWithArrayInputRequest): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = CreateUsersWithArrayInputRequest(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): CreateUsersWithArrayInputRequest = + CreateUsersWithArrayInputRequest(serializer.deserialize(decoder)) } } + /** * Creates list of users with given input array * @@ -123,42 +125,44 @@ class UserApi constructor( suspend fun createUsersWithListInput( body: kotlin.collections.List ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = CreateUsersWithListInputRequest(body) + val bodyOag = CreateUsersWithListInputRequest(body) - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.POST, "/user/createWithList", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } - @Serializable + @Serializable(with = CreateUsersWithListInputRequest.Companion::class) private class CreateUsersWithListInputRequest(val value: List) { - @Serializer(CreateUsersWithListInputRequest::class) companion object : KSerializer { - private val serializer = User.serializer().list - override val descriptor = PrimitiveDescriptor("CreateUsersWithListInputRequest", PrimitiveKind.STRING) + private val serializer = ListSerializer(User.serializer()) + override val descriptor = PrimitiveSerialDescriptor("CreateUsersWithListInputRequest", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: CreateUsersWithListInputRequest) = + override fun serialize(encoder: Encoder, value: CreateUsersWithListInputRequest): Unit = serializer.serialize(encoder, value.value) - override fun deserialize(decoder: Decoder) = CreateUsersWithListInputRequest(serializer.deserialize(decoder)) + override fun deserialize(decoder: Decoder): CreateUsersWithListInputRequest = + CreateUsersWithListInputRequest(serializer.deserialize(decoder)) } } + /** * Delete user * This can only be done by the logged in user. @@ -168,27 +172,28 @@ class UserApi constructor( suspend fun deleteUser( username: kotlin.String ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.DELETE, - "/user/{username}".replace("username", "$username"), - queries = queries_, - headers = headers_ + "/user/{username}".replace("{" + "username" + "}", username.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -201,27 +206,28 @@ class UserApi constructor( suspend fun getUserByName( username: kotlin.String ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, - "/user/{username}".replace("username", "$username"), - queries = queries_, - headers = headers_ + "/user/{username}".replace("{" + "username" + "}", username.toString()), + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -236,29 +242,30 @@ class UserApi constructor( username: kotlin.String, password: kotlin.String ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() - queries_.add("username", username) - queries_.add("password", password) + val queriesOag = Queries { + add("username", username) + add("password", password) + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, "/user/login", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -268,27 +275,28 @@ class UserApi constructor( */ suspend fun logoutUser( ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = - io.ktor.client.utils.EmptyContent + val bodyOag = + EmptyContent - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.GET, "/user/logout", - queries = queries_, - headers = headers_ + queries = queriesOag, + headers = headersOag ) return request( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } /** @@ -302,26 +310,27 @@ class UserApi constructor( username: kotlin.String, body: User ): HttpResponse { - val authNames_ = listOf() + val authNamesOag = listOf() - val body_ = body + val bodyOag = body - val queries_ = Queries() + val queriesOag = Queries { + } - val headers_ = mutableMapOf( + val headersOag = mutableMapOf( ) - val config_ = RequestConfig( + val configOag = RequestConfig( RequestMethod.PUT, - "/user/{username}".replace("username", "$username"), - queries = queries_, - headers = headers_ + "/user/{username}".replace("{" + "username" + "}", username.toString()), + queries = queriesOag, + headers = headersOag ) return jsonRequest( - config_, - body_, - authNames_ + configOag, + bodyOag, + authNamesOag ).wrap() } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt index f79709dfd560..96a5b698e6d4 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiAbstractions.kt @@ -14,6 +14,10 @@ sealed class QueryParam { } class Queries(val queries: MutableMap = mutableMapOf()) { + constructor(queries: MutableMap = mutableMapOf(), config: Queries.() -> Unit): this(queries) { + config(this) + } + // Single fun add(name: String, value: String?) { if (value != null) { diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt index d538747a02c1..44d3c57a7c73 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/ApiClientBase.kt @@ -16,20 +16,15 @@ import io.ktor.http.* import io.ktor.http.content.OutgoingContent import io.ktor.http.content.PartData import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import org.openapitools.client.auth.* open class ApiClientBase( private val baseUrl: String, httpClientEngine: HttpClientEngine?, - private val serializer: KotlinxSerializer + json: Json = Json {} ) { - constructor( - baseUrl: String, - httpClientEngine: HttpClientEngine?, - jsonConfiguration: JsonConfiguration - ) : this(baseUrl, httpClientEngine, KotlinxSerializer(Json(jsonConfiguration))) + private val serializer = KotlinxSerializer(json) private val client: HttpClient by lazy { val jsonConfig: JsonFeature.Config.() -> Unit = { this.serializer = this@ApiClientBase.serializer } diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt index 6906d5a323a8..cb4eeb475ab7 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Base64ByteArray.kt @@ -1,14 +1,21 @@ package org.openapitools.client.infrastructure -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder -@Serializable +@Serializable(with = Base64ByteArray.Companion::class) class Base64ByteArray(val value: ByteArray) { - @Serializer(Base64ByteArray::class) companion object : KSerializer { - override val descriptor = PrimitiveDescriptor("Base64ByteArray", PrimitiveKind.STRING) - override fun serialize(encoder: Encoder, value: Base64ByteArray) = encoder.encodeString(value.value.encodeBase64()) - override fun deserialize(decoder: Decoder) = Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) + override val descriptor = PrimitiveSerialDescriptor("Base64ByteArray", PrimitiveKind.STRING) + override fun serialize(encoder: Encoder, value: Base64ByteArray): Unit = + encoder.encodeString(value.value.encodeBase64()) + + override fun deserialize(decoder: Decoder): Base64ByteArray = + Base64ByteArray(decoder.decodeString().decodeBase64Bytes()) } override fun equals(other: Any?): Boolean { @@ -25,4 +32,4 @@ class Base64ByteArray(val value: ByteArray) { override fun toString(): String { return "Base64ByteArray(${hex(value)})" } -} \ No newline at end of file +} diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt index 43295604da7b..dea7d43223ab 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/Bytes.kt @@ -32,7 +32,7 @@ internal fun hex(bytes: ByteArray): String { result[resultIndex++] = digits[b and 0x0f] } - return String(result) + return result.concatToString() } /** diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt index 2ef5640587a2..f2083a69000f 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/OctetByteArray.kt @@ -1,12 +1,16 @@ package org.openapitools.client.infrastructure -import kotlinx.serialization.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder -@Serializable +@Serializable(with = OctetByteArray.Companion::class) class OctetByteArray(val value: ByteArray) { - @Serializer(OctetByteArray::class) companion object : KSerializer { - override val descriptor = PrimitiveDescriptor("OctetByteArray", PrimitiveKind.STRING) + override val descriptor = PrimitiveSerialDescriptor("OctetByteArray", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: OctetByteArray) = encoder.encodeString(hex(value.value)) override fun deserialize(decoder: Decoder) = OctetByteArray(hex(decoder.decodeString())) } @@ -25,4 +29,4 @@ class OctetByteArray(val value: ByteArray) { override fun toString(): String { return "OctetByteArray(${hex(value)})" } -} \ No newline at end of file +} diff --git a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt index 34af19afba5f..45ccc4036bff 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/common/main/org/openapitools/client/infrastructure/encoding.kt @@ -1,5 +1,3 @@ package org.openapitools.client.infrastructure -import kotlinx.io.core.toByteArray - -fun String.toBase64() = toByteArray().encodeBase64() +fun String.toBase64() = encodeToByteArray().encodeBase64() From b8441e27c5221d3edeb9e01f3eadc958c0e2b1a1 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Sun, 30 Aug 2020 14:54:24 +0200 Subject: [PATCH 8/8] Updated kotlin docs --- docs/generators/kotlin.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index c53f7f7a59df..1960dcae3c88 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -10,7 +10,7 @@ sidebar_label: kotlin |artifactVersion|Generated artifact's package version.| |1.0.0| |collectionType|Option. Collection type to use|

**array**
kotlin.Array
**list**
kotlin.collections.List
|list| |dateLibrary|Option. Date library to use|
**threetenbp-localdatetime**
Threetenbp - Backport of JSR310 (jvm only, for legacy app only)
**string**
String
**java8-localdatetime**
Java 8 native JSR310 (jvm only, for legacy app only)
**java8**
Java 8 native JSR310 (jvm only, preferred for jdk 1.8+)
**threetenbp**
Threetenbp - Backport of JSR310 (jvm only, preferred for jdk < 1.8)
|java8| -|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |camelCase| +|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |PascalCase| |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |library|Library template (sub-template) to use|
**jvm-okhttp4**
[DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
**jvm-okhttp3**
Platform: Java Virtual Machine. HTTP client: OkHttp 3.12.4 (Android 2.3+ and Java 7+). JSON processing: Moshi 1.8.0.
**jvm-retrofit2**
Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
**multiplatform**
Platform: Kotlin multiplatform. HTTP client: Ktor 1.2.4. JSON processing: Kotlinx Serialization: 0.12.0.
|jvm-okhttp4| |modelMutable|Create mutable models| |false|