diff --git a/README.md b/README.md
index 09b952dee03..39161f9efce 100644
--- a/README.md
+++ b/README.md
@@ -850,13 +850,14 @@ Swagger Codegen core team members are contributors who have been making signific
|:-------------|:-------------|
| ActionScript | |
| C++ | |
-| C# | @jimschubert (2016/05/01) | |
+| C# | @jimschubert (2016/05/01) |
| Clojure | @xhh (2016/05/01) |
| Dart | |
| Groovy | |
| Go | @guohuang (2016/05/01) @neilotoole (2016/05/01) |
| Java | @cbornet (2016/05/01) @xhh (2016/05/01) @epaul (2016/06/04) |
| Java (Spring Cloud) | @cbornet (2016/07/19) |
+| Kotlin | @jimschubert (2016/05/01) |
| NodeJS/Javascript | @xhh (2016/05/01) |
| ObjC | @mateuszmackowiak (2016/05/09) |
| Perl | @wing328 (2016/05/01) |
@@ -916,6 +917,7 @@ Here is a list of template creators:
* Javascript/NodeJS: @jfiala
* Javascript (Closure-annotated Angular) @achew22
* JMeter @davidkiss
+ * Kotlin @jimschubert
* Perl: @wing328
* PHP (Guzzle): @baartosz
* Swift: @tkqubo
diff --git a/bin/kotlin-client-petstore.sh b/bin/kotlin-client-petstore.sh
index fa017f1e8ef..f2e558e2466 100755
--- a/bin/kotlin-client-petstore.sh
+++ b/bin/kotlin-client-petstore.sh
@@ -26,6 +26,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
-ags="$@ generate -t modules/swagger-codegen/src/main/resources/kotlin-client -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l kotlin -o samples/client/kotlin"
+ags="generate -t modules/swagger-codegen/src/main/resources/kotlin-client -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l kotlin --artifact-id kotlin-petstore-client -o samples/client/petstore/kotlin $@"
java ${JAVA_OPTS} -jar ${executable} ${ags}
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index 7faa46aba34..556b6ff2f63 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -14,7 +14,7 @@ pattern="@Command(name = \"$1\""
if expr "x$1" : 'x[a-z][a-z-]*$' > /dev/null && fgrep -qe "$pattern" "$cmdsrc"/*.java; then
# If ${GEN_DIR} has been mapped elsewhere from default, and that location has not been built
if [[ ! -f "${codegen}" ]]; then
- (cd "${GEN_DIR}" && exec mvn -am -pl "modules/swagger-codegen-cli" package)
+ (cd "${GEN_DIR}" && exec mvn -am -pl "modules/swagger-codegen-cli" -Duser.home=$(dirname MAVEN_CONFIG) package)
fi
command=$1
shift
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
index 47a97e4d89d..d9bf80c1b62 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
@@ -173,9 +173,15 @@ public class CodegenConstants {
public static final String EXCLUDE_TESTS = "excludeTests";
public static final String EXCLUDE_TESTS_DESC = "Specifies that no tests are to be generated.";
+ // Not user-configurable. System provided for use in templates.
+ public static final String GENERATE_API_DOCS = "generateApiDocs";
+
public static final String GENERATE_API_TESTS = "generateApiTests";
public static final String GENERATE_API_TESTS_DESC = "Specifies that api tests are to be generated.";
+ // Not user-configurable. System provided for use in templates.
+ public static final String GENERATE_MODEL_DOCS = "generateModelDocs";
+
public static final String GENERATE_MODEL_TESTS = "generateModelTests";
public static final String GENERATE_MODEL_TESTS_DESC = "Specifies that model tests are to be generated.";
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java
index ad1c6c0255a..2e161da54f8 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java
@@ -120,6 +120,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
// Additional properties added for tests to exclude references in project related files
config.additionalProperties().put(CodegenConstants.GENERATE_API_TESTS, generateApiTests);
config.additionalProperties().put(CodegenConstants.GENERATE_MODEL_TESTS, generateModelTests);
+
+ config.additionalProperties().put(CodegenConstants.GENERATE_API_DOCS, generateApiDocumentation);
+ config.additionalProperties().put(CodegenConstants.GENERATE_MODEL_DOCS, generateModelDocumentation);
+
if(!generateApiTests && !generateModelTests) {
config.additionalProperties().put(CodegenConstants.EXCLUDE_TESTS, true);
}
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/KotlinClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/KotlinClientCodegen.java
index aa1a0039ded..7e52a1c6554 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/KotlinClientCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/KotlinClientCodegen.java
@@ -20,6 +20,8 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/kotlin";
protected String packageName = "io.swagger.client";
+ protected String apiDocPath = "docs/";
+ protected String modelDocPath = "docs/";
/**
* Constructs an instance of `KotlinClientCodegen`.
@@ -30,7 +32,8 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
outputFolder = "generated-code" + File.separator + "kotlin-client";
modelTemplateFiles.put("model.mustache", ".kt");
apiTemplateFiles.put("api.mustache", ".kt");
- // TODO: Documentation generation
+ modelDocTemplateFiles.put("model_doc.mustache", ".md");
+ apiDocTemplateFiles.put("api_doc.mustache", ".md");
embeddedTemplateDir = templateDir = "kotlin-client";
apiPackage = packageName + ".apis";
modelPackage = packageName + ".models";
@@ -122,7 +125,7 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
typeMapping.put("date-time", "java.time.LocalDateTime");
typeMapping.put("date", "java.time.LocalDateTime");
typeMapping.put("file", "java.io.File");
- typeMapping.put("array", "kotlin.Array");
+ typeMapping.put("array", "kotlin.collections.List");
typeMapping.put("list", "kotlin.collections.List");
typeMapping.put("map", "kotlin.collections.Map");
typeMapping.put("object", "kotlin.Any");
@@ -130,7 +133,7 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
typeMapping.put("Date", "java.time.LocalDateTime");
typeMapping.put("DateTime", "java.time.LocalDateTime");
- instantiationTypes.put("array", "arrayOf");
+ instantiationTypes.put("array", "listOf");
instantiationTypes.put("list", "listOf");
instantiationTypes.put("map", "mapOf");
@@ -227,7 +230,10 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage());
additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage());
- supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
+ additionalProperties.put("apiDocPath", apiDocPath);
+ additionalProperties.put("modelDocPath", modelDocPath);
+
+ 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"));
@@ -255,11 +261,22 @@ public class KotlinClientCodegen extends DefaultCodegen implements CodegenConfig
return input.replace("\"", "");
}
+ @Override
+ public String apiDocFileFolder() {
+ return (outputFolder + "/" + apiDocPath).replace('/', File.separatorChar);
+ }
+
@Override
public String apiFileFolder() {
return outputFolder + File.separator + sourceFolder + File.separator + apiPackage().replace('.', File.separatorChar);
}
+ @Override
+ public String modelDocFileFolder() {
+ return (outputFolder + "/" + modelDocPath).replace('/', File.separatorChar);
+ }
+
+
@Override
public String modelFileFolder() {
return outputFolder + File.separator + sourceFolder + File.separator + modelPackage().replace('.', File.separatorChar);
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/README.md b/modules/swagger-codegen/src/main/resources/kotlin-client/README.md
deleted file mode 100644
index 885688a0fd6..00000000000
--- a/modules/swagger-codegen/src/main/resources/kotlin-client/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Generated Kotlin Client library
-
-## Requires
-
-* Kotlin 1.1.2
-* Gradle 3.3
-
-## Build
-
-First, create the gradle wrapper script:
-
-```
-gradle wrapper
-```
-
-Then, run:
-
-```
-./gradlew check assemble
-```
-
-This runs all tests and packages the library.
-
-## Notes
-
-* Supports JSON inputs/outputs, File inputs, and Form inputs.
-* Supports collection formats for query parameters: csv, tsv, ssv, pipes.
-* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in Swagger definitions.
-* Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets.
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/README.mustache b/modules/swagger-codegen/src/main/resources/kotlin-client/README.mustache
new file mode 100644
index 00000000000..7a10bab6c12
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/kotlin-client/README.mustache
@@ -0,0 +1,85 @@
+# {{packageName}} - Kotlin client library for {{appName}}
+
+## Requires
+
+* Kotlin 1.1.2
+* Gradle 3.3
+
+## Build
+
+First, create the gradle wrapper script:
+
+```
+gradle wrapper
+```
+
+Then, run:
+
+```
+./gradlew check assemble
+```
+
+This runs all tests and packages the library.
+
+## Features/Implementation Notes
+
+* Supports JSON inputs/outputs, File inputs, and Form inputs.
+* Supports collection formats for query parameters: csv, tsv, ssv, pipes.
+* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in Swagger definitions.
+* Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets.
+
+{{#generateApiDocs}}
+
+## Documentation for API Endpoints
+
+All URIs are relative to *{{{basePath}}}*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{{summary}}}{{/summary}}
+{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
+{{/generateApiDocs}}
+
+{{#generateModelDocs}}
+
+## Documentation for Models
+
+{{#modelPackage}}
+{{#models}}{{#model}} - [{{{modelPackage}}}.{{{classname}}}]({{modelDocPath}}{{{classname}}}.md)
+{{/model}}{{/models}}
+{{/modelPackage}}
+{{^modelPackage}}
+No model defined in this package
+{{/modelPackage}}
+{{/generateModelDocs}}
+
+{{! TODO: optional documentation for authorization? }}
+## Documentation for Authorization
+
+{{^authMethods}}
+All endpoints do not require authorization.
+{{/authMethods}}
+{{#authMethods}}
+{{#last}}
+Authentication schemes defined for the API:
+{{/last}}
+{{/authMethods}}
+{{#authMethods}}
+
+### {{name}}
+
+{{#isApiKey}}- **Type**: API key
+- **API key parameter name**: {{keyParamName}}
+- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}}
+{{/isApiKey}}
+{{#isBasic}}- **Type**: HTTP basic authentication
+{{/isBasic}}
+{{#isOAuth}}- **Type**: OAuth
+- **Flow**: {{flow}}
+- **Authorization URL**: {{authorizationUrl}}
+- **Scopes**: {{^scopes}}N/A{{/scopes}}
+{{#scopes}} - {{scope}}: {{description}}
+{{/scopes}}
+{{/isOAuth}}
+
+{{/authMethods}}
\ No newline at end of file
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/api_doc.mustache b/modules/swagger-codegen/src/main/resources/kotlin-client/api_doc.mustache
new file mode 100644
index 00000000000..d288470ca88
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/kotlin-client/api_doc.mustache
@@ -0,0 +1,65 @@
+# {{classname}}{{#description}}
+{{description}}{{/description}}
+
+All URIs are relative to *{{basePath}}*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+{{#operations}}{{#operation}}[**{{operationId}}**]({{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}}
+{{/operation}}{{/operations}}
+
+{{#operations}}
+{{#operation}}
+
+# **{{operationId}}**
+> {{#returnType}}{{returnType}} {{/returnType}}{{operationId}}({{#allParams}}{{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
+
+{{summary}}{{#notes}}
+
+{{notes}}{{/notes}}
+
+### Example
+```kotlin
+// Import classes:
+//import {{{packageName}}}.infrastructure.*
+//import {{{modelPackage}}}.*
+
+{{! TODO: Auth method documentation examples}}
+val apiInstance = {{{classname}}}()
+{{#allParams}}
+val {{{paramName}}} : {{{dataType}}} = {{{example}}} // {{{dataType}}} | {{{description}}}
+{{/allParams}}
+try {
+ {{#returnType}}val result : {{{returnType}}} = {{/returnType}}apiInstance.{{{operationId}}}({{#allParams}}{{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}){{#returnType}}
+ println(result){{/returnType}}
+} catch (e: ClientException) {
+ println("4xx response calling {{{classname}}}#{{{operationId}}}")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling {{{classname}}}#{{{operationId}}}")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}}
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------{{/-last}}{{/allParams}}
+{{#allParams}} **{{paramName}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isFile}}**{{dataType}}**{{/isFile}}{{^isFile}}{{#generateModelDocs}}[**{{dataType}}**]({{baseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{dataType}}**{{/generateModelDocs}}{{/isFile}}{{/isPrimitiveType}}| {{description}} |{{^required}} [optional]{{/required}}{{#defaultValue}} [default to {{defaultValue}}]{{/defaultValue}}{{#allowableValues}} [enum: {{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}]{{/allowableValues}}
+{{/allParams}}
+
+### Return type
+
+{{#returnType}}{{#returnTypeIsPrimitive}}**{{returnType}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{#generateModelDocs}}[**{{returnType}}**]({{returnBaseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{returnType}}**{{/generateModelDocs}}{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}null (empty response body){{/returnType}}
+
+### Authorization
+
+{{^authMethods}}No authorization required{{/authMethods}}{{#authMethods}}[{{name}}](../README.md#{{name}}){{^-last}}, {{/-last}}{{/authMethods}}
+
+### HTTP request headers
+
+ - **Content-Type**: {{#consumes}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/consumes}}{{^consumes}}Not defined{{/consumes}}
+ - **Accept**: {{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}{{^produces}}Not defined{{/produces}}
+
+{{/operation}}
+{{/operations}}
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/class_doc.mustache b/modules/swagger-codegen/src/main/resources/kotlin-client/class_doc.mustache
new file mode 100644
index 00000000000..45e19942734
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/kotlin-client/class_doc.mustache
@@ -0,0 +1,15 @@
+# {{classname}}
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+{{#vars}}**{{name}}** | {{#isEnum}}[**inline**](#{{datatypeWithEnum}}){{/isEnum}}{{^isEnum}}{{#isPrimitiveType}}**{{datatype}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{datatype}}**]({{complexType}}.md){{/isPrimitiveType}}{{/isEnum}} | {{description}} | {{^required}} [optional]{{/required}}{{#readOnly}} [readonly]{{/readOnly}}
+{{/vars}}
+{{#vars}}{{#isEnum}}
+
+{{!NOTE: see java's resources "pojo_doc.mustache" once enums are fully implemented}}
+## Enum: {{baseName}}
+Name | Value
+---- | -----{{#allowableValues}}
+{{name}} | {{#values}}{{.}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}
+{{/isEnum}}{{/vars}}
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/enum_doc.mustache b/modules/swagger-codegen/src/main/resources/kotlin-client/enum_doc.mustache
new file mode 100644
index 00000000000..fcb3d7e61aa
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/kotlin-client/enum_doc.mustache
@@ -0,0 +1,7 @@
+# {{classname}}
+
+## Enum
+
+{{#allowableValues}}{{#enumVars}}
+ * `{{name}}` (value: `{{{value}}}`)
+{{/enumVars}}{{/allowableValues}}
diff --git a/modules/swagger-codegen/src/main/resources/kotlin-client/model_doc.mustache b/modules/swagger-codegen/src/main/resources/kotlin-client/model_doc.mustache
new file mode 100644
index 00000000000..e3b71842118
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/kotlin-client/model_doc.mustache
@@ -0,0 +1,3 @@
+{{#models}}{{#model}}
+{{#isEnum}}{{>enum_doc}}{{/isEnum}}{{^isEnum}}{{>class_doc}}{{/isEnum}}
+{{/model}}{{/models}}
diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/kotlin/KotlinClientCodegenModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/kotlin/KotlinClientCodegenModelTest.java
index 23bf434bf3f..474806638d6 100644
--- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/kotlin/KotlinClientCodegenModelTest.java
+++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/kotlin/KotlinClientCodegenModelTest.java
@@ -104,10 +104,10 @@ public class KotlinClientCodegenModelTest {
Assert.assertEquals(property.baseName, "examples");
Assert.assertEquals(property.getter, "getExamples");
Assert.assertEquals(property.setter, "setExamples");
- Assert.assertEquals(property.datatype, "kotlin.Array");
+ Assert.assertEquals(property.datatype, "kotlin.collections.List");
Assert.assertEquals(property.name, "examples");
Assert.assertEquals(property.defaultValue, "null");
- Assert.assertEquals(property.baseType, "kotlin.Array");
+ Assert.assertEquals(property.baseType, "kotlin.collections.List");
Assert.assertEquals(property.containerType, "array");
Assert.assertFalse(property.required);
Assert.assertTrue(property.isContainer);
diff --git a/new.sh b/new.sh
index 8c71230d50a..cace3efcad3 100755
--- a/new.sh
+++ b/new.sh
@@ -160,7 +160,7 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="\${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
-ags="\$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l ${gen_name} -o samples/${gen_type}/${gen_name}"
+ags="\$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l ${gen_name} -o samples/${gen_type}/petstore/${gen_name}"
java \${JAVA_OPTS} -jar \${executable} \${ags}
EOF
diff --git a/run-in-docker.sh b/run-in-docker.sh
index 99581115871..8cf6cc64de2 100755
--- a/run-in-docker.sh
+++ b/run-in-docker.sh
@@ -10,7 +10,9 @@ mkdir -p "${maven_cache_repo}"
docker run --rm -it \
-w /gen \
-e GEN_DIR=/gen \
+ -e MAVEN_CONFIG=/var/maven/.m2 \
+ -u "$(id -u):$(id -u)" \
-v "${PWD}:/gen" \
- -v "${maven_cache_repo}:/root/.m2/repository" \
+ -v "${maven_cache_repo}:/var/maven/.m2/repository" \
--entrypoint /gen/docker-entrypoint.sh \
maven:3-jdk-7 "$@"
diff --git a/samples/client/kotlin/README.md b/samples/client/kotlin/README.md
deleted file mode 100644
index 885688a0fd6..00000000000
--- a/samples/client/kotlin/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Generated Kotlin Client library
-
-## Requires
-
-* Kotlin 1.1.2
-* Gradle 3.3
-
-## Build
-
-First, create the gradle wrapper script:
-
-```
-gradle wrapper
-```
-
-Then, run:
-
-```
-./gradlew check assemble
-```
-
-This runs all tests and packages the library.
-
-## Notes
-
-* Supports JSON inputs/outputs, File inputs, and Form inputs.
-* Supports collection formats for query parameters: csv, tsv, ssv, pipes.
-* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in Swagger definitions.
-* Implementation of ApiClient is intended to reduce method counts, specifically to benefit Android targets.
\ No newline at end of file
diff --git a/samples/client/kotlin/bin/settings.gradle b/samples/client/kotlin/bin/settings.gradle
deleted file mode 100644
index 50b05bef95e..00000000000
--- a/samples/client/kotlin/bin/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'kotlin-client'
\ No newline at end of file
diff --git a/samples/client/kotlin/build.gradle b/samples/client/kotlin/build.gradle
deleted file mode 100644
index 1ae1ae99322..00000000000
--- a/samples/client/kotlin/build.gradle
+++ /dev/null
@@ -1,32 +0,0 @@
-group 'io.swagger'
-version '1.0.0'
-
-task wrapper(type: Wrapper) {
- gradleVersion = '3.3'
- distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
-}
-
-buildscript {
- ext.kotlin_version = '1.1.2'
-
- repositories {
- mavenCentral()
- }
- dependencies {
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
-
-apply plugin: 'kotlin'
-
-repositories {
- mavenCentral()
-}
-
-dependencies {
- compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
- compile "com.squareup.moshi:moshi-kotlin:1.5.0"
- compile "com.squareup.moshi:moshi-adapters:1.5.0"
- compile "com.squareup.okhttp3:okhttp:3.8.0"
- testCompile "io.kotlintest:kotlintest:2.0.2"
-}
\ No newline at end of file
diff --git a/samples/client/kotlin/settings.gradle b/samples/client/kotlin/settings.gradle
deleted file mode 100644
index 50b05bef95e..00000000000
--- a/samples/client/kotlin/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'kotlin-client'
\ No newline at end of file
diff --git a/samples/client/kotlin/.gitignore b/samples/client/petstore/kotlin/.gitignore
similarity index 99%
rename from samples/client/kotlin/.gitignore
rename to samples/client/petstore/kotlin/.gitignore
index fe1b206d040..2983e3c1db3 100644
--- a/samples/client/kotlin/.gitignore
+++ b/samples/client/petstore/kotlin/.gitignore
@@ -1,4 +1,4 @@
-
+./bin/
# Created by https://www.gitignore.io/api/java,intellij,gradle
### Intellij ###
diff --git a/samples/client/kotlin/.swagger-codegen-ignore b/samples/client/petstore/kotlin/.swagger-codegen-ignore
similarity index 100%
rename from samples/client/kotlin/.swagger-codegen-ignore
rename to samples/client/petstore/kotlin/.swagger-codegen-ignore
diff --git a/samples/client/kotlin/.swagger-codegen/VERSION b/samples/client/petstore/kotlin/.swagger-codegen/VERSION
similarity index 100%
rename from samples/client/kotlin/.swagger-codegen/VERSION
rename to samples/client/petstore/kotlin/.swagger-codegen/VERSION
diff --git a/samples/client/petstore/kotlin/README.md b/samples/client/petstore/kotlin/README.md
new file mode 100644
index 00000000000..410e14e4adb
--- /dev/null
+++ b/samples/client/petstore/kotlin/README.md
@@ -0,0 +1,90 @@
+# io.swagger.client - Kotlin client library for Swagger Petstore
+
+## Requires
+
+* Kotlin 1.1.2
+* Gradle 3.3
+
+## Build
+
+First, create the gradle wrapper script:
+
+```
+gradle wrapper
+```
+
+Then, run:
+
+```
+./gradlew check assemble
+```
+
+This runs all tests and packages the library.
+
+## Features/Implementation Notes
+
+* Supports JSON inputs/outputs, File inputs, and Form inputs.
+* Supports collection formats for query parameters: csv, tsv, ssv, pipes.
+* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in Swagger 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*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*PetApi* | [**addPet**](docs/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store
+*PetApi* | [**deletePet**](docs/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet
+*PetApi* | [**findPetsByStatus**](docs/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status
+*PetApi* | [**findPetsByTags**](docs/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags
+*PetApi* | [**getPetById**](docs/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID
+*PetApi* | [**updatePet**](docs/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet
+*PetApi* | [**updatePetWithForm**](docs/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data
+*PetApi* | [**uploadFile**](docs/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image
+*StoreApi* | [**deleteOrder**](docs/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID
+*StoreApi* | [**getInventory**](docs/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status
+*StoreApi* | [**getOrderById**](docs/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID
+*StoreApi* | [**placeOrder**](docs/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet
+*UserApi* | [**createUser**](docs/UserApi.md#createuser) | **POST** /user | Create user
+*UserApi* | [**createUsersWithArrayInput**](docs/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array
+*UserApi* | [**createUsersWithListInput**](docs/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array
+*UserApi* | [**deleteUser**](docs/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user
+*UserApi* | [**getUserByName**](docs/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name
+*UserApi* | [**loginUser**](docs/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system
+*UserApi* | [**logoutUser**](docs/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session
+*UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user
+
+
+
+## Documentation for Models
+
+ - [io.swagger.client.models.ApiResponse](docs/ApiResponse.md)
+ - [io.swagger.client.models.Category](docs/Category.md)
+ - [io.swagger.client.models.Order](docs/Order.md)
+ - [io.swagger.client.models.Pet](docs/Pet.md)
+ - [io.swagger.client.models.Tag](docs/Tag.md)
+ - [io.swagger.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
+- **Flow**: implicit
+- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog
+- **Scopes**:
+ - write:pets: modify pets in your account
+ - read:pets: read your pets
+
diff --git a/samples/client/kotlin/bin/build.gradle b/samples/client/petstore/kotlin/build.gradle
similarity index 100%
rename from samples/client/kotlin/bin/build.gradle
rename to samples/client/petstore/kotlin/build.gradle
diff --git a/samples/client/petstore/kotlin/docs/ApiResponse.md b/samples/client/petstore/kotlin/docs/ApiResponse.md
new file mode 100644
index 00000000000..6b4c6bf2779
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/ApiResponse.md
@@ -0,0 +1,12 @@
+
+# ApiResponse
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**code** | **kotlin.Int** | | [optional]
+**type** | **kotlin.String** | | [optional]
+**message** | **kotlin.String** | | [optional]
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/Category.md b/samples/client/petstore/kotlin/docs/Category.md
new file mode 100644
index 00000000000..2c28a670fc7
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/Category.md
@@ -0,0 +1,11 @@
+
+# Category
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **kotlin.Long** | | [optional]
+**name** | **kotlin.String** | | [optional]
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/Order.md b/samples/client/petstore/kotlin/docs/Order.md
new file mode 100644
index 00000000000..ef31dbf2f4f
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/Order.md
@@ -0,0 +1,22 @@
+
+# Order
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **kotlin.Long** | | [optional]
+**petId** | **kotlin.Long** | | [optional]
+**quantity** | **kotlin.Int** | | [optional]
+**shipDate** | [**java.time.LocalDateTime**](java.time.LocalDateTime.md) | | [optional]
+**status** | [**inline**](#StatusEnum) | Order Status | [optional]
+**complete** | **kotlin.Boolean** | | [optional]
+
+
+
+## Enum: status
+Name | Value
+---- | -----
+status | placed, approved, delivered
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/Pet.md b/samples/client/petstore/kotlin/docs/Pet.md
new file mode 100644
index 00000000000..73963abeb04
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/Pet.md
@@ -0,0 +1,22 @@
+
+# Pet
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **kotlin.Long** | | [optional]
+**category** | [**Category**](Category.md) | | [optional]
+**name** | **kotlin.String** | |
+**photoUrls** | **kotlin.collections.List<kotlin.String>** | |
+**tags** | [**kotlin.collections.List<Tag>**](Tag.md) | | [optional]
+**status** | [**inline**](#StatusEnum) | pet status in the store | [optional]
+
+
+
+## Enum: status
+Name | Value
+---- | -----
+status | available, pending, sold
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/PetApi.md b/samples/client/petstore/kotlin/docs/PetApi.md
new file mode 100644
index 00000000000..39803d4af41
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/PetApi.md
@@ -0,0 +1,398 @@
+# PetApi
+
+All URIs are relative to *http://petstore.swagger.io/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**addPet**](PetApi.md#addPet) | **POST** /pet | Add a new pet to the store
+[**deletePet**](PetApi.md#deletePet) | **DELETE** /pet/{petId} | Deletes a pet
+[**findPetsByStatus**](PetApi.md#findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
+[**findPetsByTags**](PetApi.md#findPetsByTags) | **GET** /pet/findByTags | Finds Pets by tags
+[**getPetById**](PetApi.md#getPetById) | **GET** /pet/{petId} | Find pet by ID
+[**updatePet**](PetApi.md#updatePet) | **PUT** /pet | Update an existing pet
+[**updatePetWithForm**](PetApi.md#updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
+[**uploadFile**](PetApi.md#uploadFile) | **POST** /pet/{petId}/uploadImage | uploads an image
+
+
+
+# **addPet**
+> addPet(body)
+
+Add a new pet to the store
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val body : Pet = // Pet | Pet object that needs to be added to the store
+try {
+ apiInstance.addPet(body)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#addPet")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#addPet")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: application/xml, application/json
+
+
+# **deletePet**
+> deletePet(petId, apiKey)
+
+Deletes a pet
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val petId : kotlin.Long = 789 // kotlin.Long | Pet id to delete
+val apiKey : kotlin.String = apiKey_example // kotlin.String |
+try {
+ apiInstance.deletePet(petId, apiKey)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#deletePet")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#deletePet")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **kotlin.Long**| Pet id to delete |
+ **apiKey** | **kotlin.String**| | [optional]
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **findPetsByStatus**
+> kotlin.collections.List<Pet> findPetsByStatus(status)
+
+Finds Pets by status
+
+Multiple status values can be provided with comma separated strings
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val status : kotlin.collections.List = // kotlin.collections.List | Status values that need to be considered for filter
+try {
+ val result : kotlin.collections.List = apiInstance.findPetsByStatus(status)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#findPetsByStatus")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#findPetsByStatus")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **status** | [**kotlin.collections.List<kotlin.String>**](kotlin.String.md)| Status values that need to be considered for filter | [enum: available, pending, sold]
+
+### Return type
+
+[**kotlin.collections.List<Pet>**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **findPetsByTags**
+> kotlin.collections.List<Pet> findPetsByTags(tags)
+
+Finds Pets by tags
+
+Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val tags : kotlin.collections.List = // kotlin.collections.List | Tags to filter by
+try {
+ val result : kotlin.collections.List = apiInstance.findPetsByTags(tags)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#findPetsByTags")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#findPetsByTags")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **tags** | [**kotlin.collections.List<kotlin.String>**](kotlin.String.md)| Tags to filter by |
+
+### Return type
+
+[**kotlin.collections.List<Pet>**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **getPetById**
+> Pet getPetById(petId)
+
+Find pet by ID
+
+Returns a single pet
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val petId : kotlin.Long = 789 // kotlin.Long | ID of pet to return
+try {
+ val result : Pet = apiInstance.getPetById(petId)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#getPetById")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#getPetById")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **kotlin.Long**| ID of pet to return |
+
+### Return type
+
+[**Pet**](Pet.md)
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **updatePet**
+> updatePet(body)
+
+Update an existing pet
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val body : Pet = // Pet | Pet object that needs to be added to the store
+try {
+ apiInstance.updatePet(body)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#updatePet")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#updatePet")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: application/xml, application/json
+
+
+# **updatePetWithForm**
+> updatePetWithForm(petId, name, status)
+
+Updates a pet in the store with form data
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val petId : kotlin.Long = 789 // kotlin.Long | ID of pet that needs to be updated
+val name : kotlin.String = name_example // kotlin.String | Updated name of the pet
+val status : kotlin.String = status_example // kotlin.String | Updated status of the pet
+try {
+ apiInstance.updatePetWithForm(petId, name, status)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#updatePetWithForm")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#updatePetWithForm")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **kotlin.Long**| ID of pet that needs to be updated |
+ **name** | **kotlin.String**| Updated name of the pet | [optional]
+ **status** | **kotlin.String**| Updated status of the pet | [optional]
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: application/xml, application/json
+
+
+# **uploadFile**
+> ApiResponse uploadFile(petId, additionalMetadata, file)
+
+uploads an image
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = PetApi()
+val petId : kotlin.Long = 789 // kotlin.Long | ID of pet to update
+val additionalMetadata : kotlin.String = additionalMetadata_example // kotlin.String | Additional data to pass to server
+val file : java.io.File = /path/to/file.txt // java.io.File | file to upload
+try {
+ val result : ApiResponse = apiInstance.uploadFile(petId, additionalMetadata, file)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling PetApi#uploadFile")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling PetApi#uploadFile")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **kotlin.Long**| ID of pet to update |
+ **additionalMetadata** | **kotlin.String**| Additional data to pass to server | [optional]
+ **file** | **java.io.File**| file to upload | [optional]
+
+### Return type
+
+[**ApiResponse**](ApiResponse.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
diff --git a/samples/client/petstore/kotlin/docs/StoreApi.md b/samples/client/petstore/kotlin/docs/StoreApi.md
new file mode 100644
index 00000000000..022e1362b0f
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/StoreApi.md
@@ -0,0 +1,195 @@
+# StoreApi
+
+All URIs are relative to *http://petstore.swagger.io/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**deleteOrder**](StoreApi.md#deleteOrder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID
+[**getInventory**](StoreApi.md#getInventory) | **GET** /store/inventory | Returns pet inventories by status
+[**getOrderById**](StoreApi.md#getOrderById) | **GET** /store/order/{orderId} | Find purchase order by ID
+[**placeOrder**](StoreApi.md#placeOrder) | **POST** /store/order | Place an order for a pet
+
+
+
+# **deleteOrder**
+> deleteOrder(orderId)
+
+Delete purchase order by ID
+
+For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = StoreApi()
+val orderId : kotlin.String = orderId_example // kotlin.String | ID of the order that needs to be deleted
+try {
+ apiInstance.deleteOrder(orderId)
+} catch (e: ClientException) {
+ println("4xx response calling StoreApi#deleteOrder")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling StoreApi#deleteOrder")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **orderId** | **kotlin.String**| ID of the order that needs to be deleted |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **getInventory**
+> kotlin.collections.Map<kotlin.String, kotlin.Int> getInventory()
+
+Returns pet inventories by status
+
+Returns a map of status codes to quantities
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = StoreApi()
+try {
+ val result : kotlin.collections.Map = apiInstance.getInventory()
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling StoreApi#getInventory")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling StoreApi#getInventory")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+**kotlin.collections.Map<kotlin.String, kotlin.Int>**
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getOrderById**
+> Order getOrderById(orderId)
+
+Find purchase order by ID
+
+For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = StoreApi()
+val orderId : kotlin.Long = 789 // kotlin.Long | ID of pet that needs to be fetched
+try {
+ val result : Order = apiInstance.getOrderById(orderId)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling StoreApi#getOrderById")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling StoreApi#getOrderById")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **orderId** | **kotlin.Long**| ID of pet that needs to be fetched |
+
+### Return type
+
+[**Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **placeOrder**
+> Order placeOrder(body)
+
+Place an order for a pet
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = StoreApi()
+val body : Order = // Order | order placed for purchasing the pet
+try {
+ val result : Order = apiInstance.placeOrder(body)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling StoreApi#placeOrder")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling StoreApi#placeOrder")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Order**](Order.md)| order placed for purchasing the pet |
+
+### Return type
+
+[**Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
diff --git a/samples/client/petstore/kotlin/docs/Tag.md b/samples/client/petstore/kotlin/docs/Tag.md
new file mode 100644
index 00000000000..60ce1bcdbad
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/Tag.md
@@ -0,0 +1,11 @@
+
+# Tag
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **kotlin.Long** | | [optional]
+**name** | **kotlin.String** | | [optional]
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/User.md b/samples/client/petstore/kotlin/docs/User.md
new file mode 100644
index 00000000000..e801729b5ed
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/User.md
@@ -0,0 +1,17 @@
+
+# User
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **kotlin.Long** | | [optional]
+**username** | **kotlin.String** | | [optional]
+**firstName** | **kotlin.String** | | [optional]
+**lastName** | **kotlin.String** | | [optional]
+**email** | **kotlin.String** | | [optional]
+**password** | **kotlin.String** | | [optional]
+**phone** | **kotlin.String** | | [optional]
+**userStatus** | **kotlin.Int** | User Status | [optional]
+
+
+
diff --git a/samples/client/petstore/kotlin/docs/UserApi.md b/samples/client/petstore/kotlin/docs/UserApi.md
new file mode 100644
index 00000000000..0974c7f83cb
--- /dev/null
+++ b/samples/client/petstore/kotlin/docs/UserApi.md
@@ -0,0 +1,386 @@
+# UserApi
+
+All URIs are relative to *http://petstore.swagger.io/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createUser**](UserApi.md#createUser) | **POST** /user | Create user
+[**createUsersWithArrayInput**](UserApi.md#createUsersWithArrayInput) | **POST** /user/createWithArray | Creates list of users with given input array
+[**createUsersWithListInput**](UserApi.md#createUsersWithListInput) | **POST** /user/createWithList | Creates list of users with given input array
+[**deleteUser**](UserApi.md#deleteUser) | **DELETE** /user/{username} | Delete user
+[**getUserByName**](UserApi.md#getUserByName) | **GET** /user/{username} | Get user by user name
+[**loginUser**](UserApi.md#loginUser) | **GET** /user/login | Logs user into the system
+[**logoutUser**](UserApi.md#logoutUser) | **GET** /user/logout | Logs out current logged in user session
+[**updateUser**](UserApi.md#updateUser) | **PUT** /user/{username} | Updated user
+
+
+
+# **createUser**
+> createUser(body)
+
+Create user
+
+This can only be done by the logged in user.
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val body : User = // User | Created user object
+try {
+ apiInstance.createUser(body)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#createUser")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#createUser")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**User**](User.md)| Created user object |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **createUsersWithArrayInput**
+> createUsersWithArrayInput(body)
+
+Creates list of users with given input array
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val body : kotlin.collections.List = // kotlin.collections.List | List of user object
+try {
+ apiInstance.createUsersWithArrayInput(body)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#createUsersWithArrayInput")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#createUsersWithArrayInput")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**kotlin.collections.List<User>**](User.md)| List of user object |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **createUsersWithListInput**
+> createUsersWithListInput(body)
+
+Creates list of users with given input array
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val body : kotlin.collections.List = // kotlin.collections.List | List of user object
+try {
+ apiInstance.createUsersWithListInput(body)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#createUsersWithListInput")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#createUsersWithListInput")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**kotlin.collections.List<User>**](User.md)| List of user object |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **deleteUser**
+> deleteUser(username)
+
+Delete user
+
+This can only be done by the logged in user.
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val username : kotlin.String = username_example // kotlin.String | The name that needs to be deleted
+try {
+ apiInstance.deleteUser(username)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#deleteUser")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#deleteUser")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **kotlin.String**| The name that needs to be deleted |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **getUserByName**
+> User getUserByName(username)
+
+Get user by user name
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val username : kotlin.String = username_example // kotlin.String | The name that needs to be fetched. Use user1 for testing.
+try {
+ val result : User = apiInstance.getUserByName(username)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#getUserByName")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#getUserByName")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **kotlin.String**| The name that needs to be fetched. Use user1 for testing. |
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **loginUser**
+> kotlin.String loginUser(username, password)
+
+Logs user into the system
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val username : kotlin.String = username_example // kotlin.String | The user name for login
+val password : kotlin.String = password_example // kotlin.String | The password for login in clear text
+try {
+ val result : kotlin.String = apiInstance.loginUser(username, password)
+ println(result)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#loginUser")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#loginUser")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **kotlin.String**| The user name for login |
+ **password** | **kotlin.String**| The password for login in clear text |
+
+### Return type
+
+**kotlin.String**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **logoutUser**
+> logoutUser()
+
+Logs out current logged in user session
+
+
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+try {
+ apiInstance.logoutUser()
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#logoutUser")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#logoutUser")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+
+# **updateUser**
+> updateUser(username, body)
+
+Updated user
+
+This can only be done by the logged in user.
+
+### Example
+```kotlin
+// Import classes:
+//import io.swagger.client.infrastructure.*
+//import io.swagger.client.models.*
+
+val apiInstance = UserApi()
+val username : kotlin.String = username_example // kotlin.String | name that need to be deleted
+val body : User = // User | Updated user object
+try {
+ apiInstance.updateUser(username, body)
+} catch (e: ClientException) {
+ println("4xx response calling UserApi#updateUser")
+ e.printStackTrace()
+} catch (e: ServerException) {
+ println("5xx response calling UserApi#updateUser")
+ e.printStackTrace()
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **kotlin.String**| name that need to be deleted |
+ **body** | [**User**](User.md)| Updated user object |
+
+### Return type
+
+null (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
diff --git a/samples/client/kotlin/gradle/wrapper/gradle-wrapper.jar b/samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.jar
similarity index 99%
rename from samples/client/kotlin/gradle/wrapper/gradle-wrapper.jar
rename to samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.jar
index 45ac8213b78..f1a1584ef4a 100644
Binary files a/samples/client/kotlin/gradle/wrapper/gradle-wrapper.jar and b/samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/samples/client/kotlin/gradle/wrapper/gradle-wrapper.properties b/samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.properties
similarity index 86%
rename from samples/client/kotlin/gradle/wrapper/gradle-wrapper.properties
rename to samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.properties
index 1d03d7af2f3..09c0ff530a8 100644
--- a/samples/client/kotlin/gradle/wrapper/gradle-wrapper.properties
+++ b/samples/client/petstore/kotlin/gradle/wrapper/gradle-wrapper.properties
@@ -1,4 +1,4 @@
-#Mon May 29 10:58:54 EDT 2017
+#Mon May 29 15:39:04 EDT 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/samples/client/kotlin/gradlew b/samples/client/petstore/kotlin/gradlew
similarity index 100%
rename from samples/client/kotlin/gradlew
rename to samples/client/petstore/kotlin/gradlew
diff --git a/samples/client/kotlin/gradlew.bat b/samples/client/petstore/kotlin/gradlew.bat
similarity index 100%
rename from samples/client/kotlin/gradlew.bat
rename to samples/client/petstore/kotlin/gradlew.bat
diff --git a/samples/client/petstore/kotlin/settings.gradle b/samples/client/petstore/kotlin/settings.gradle
new file mode 100644
index 00000000000..17e020387e2
--- /dev/null
+++ b/samples/client/petstore/kotlin/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'kotlin-petstore-client'
\ No newline at end of file
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt
similarity index 96%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt
index 336843fceec..a01400aa9d9 100644
--- a/samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt
+++ b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/PetApi.kt
@@ -85,10 +85,10 @@ class PetApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCli
* Finds Pets by status
* Multiple status values can be provided with comma separated strings
* @param status Status values that need to be considered for filter
- * @return kotlin.Array
+ * @return kotlin.collections.List
*/
@Suppress("UNCHECKED_CAST")
- fun findPetsByStatus(status: kotlin.Array) : kotlin.Array {
+ fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List {
val localVariableBody: kotlin.Any? = null
val localVariableQuery: kotlin.collections.Map = mapOf("status" to status.joinToString(separator = collectionDelimiter("csv")))
val localVariableHeaders: kotlin.collections.Map = mapOf()
@@ -98,13 +98,13 @@ class PetApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCli
query = localVariableQuery,
headers = localVariableHeaders
)
- val response = request>(
+ val response = request>(
localVariableConfig,
localVariableBody
)
return when (response.responseType) {
- ResponseType.Success -> (response as Success<*>).data as kotlin.Array
+ ResponseType.Success -> (response as Success<*>).data as kotlin.collections.List
ResponseType.Informational -> TODO()
ResponseType.Redirection -> TODO()
ResponseType.ClientError -> throw ClientException((response as ClientError<*>).body as? String ?: "Client error")
@@ -117,10 +117,10 @@ class PetApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCli
* Finds Pets by tags
* Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
* @param tags Tags to filter by
- * @return kotlin.Array
+ * @return kotlin.collections.List
*/
@Suppress("UNCHECKED_CAST")
- fun findPetsByTags(tags: kotlin.Array) : kotlin.Array {
+ fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List {
val localVariableBody: kotlin.Any? = null
val localVariableQuery: kotlin.collections.Map = mapOf("tags" to tags.joinToString(separator = collectionDelimiter("csv")))
val localVariableHeaders: kotlin.collections.Map = mapOf()
@@ -130,13 +130,13 @@ class PetApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCli
query = localVariableQuery,
headers = localVariableHeaders
)
- val response = request>(
+ val response = request>(
localVariableConfig,
localVariableBody
)
return when (response.responseType) {
- ResponseType.Success -> (response as Success<*>).data as kotlin.Array
+ ResponseType.Success -> (response as Success<*>).data as kotlin.collections.List
ResponseType.Informational -> TODO()
ResponseType.Redirection -> TODO()
ResponseType.ClientError -> throw ClientException((response as ClientError<*>).body as? String ?: "Client error")
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/StoreApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/StoreApi.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/StoreApi.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/StoreApi.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt
similarity index 98%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt
index b61953eaa61..e703c71bcdd 100644
--- a/samples/client/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt
+++ b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/apis/UserApi.kt
@@ -54,7 +54,7 @@ class UserApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCl
* @param body List of user object
* @return void
*/
- fun createUsersWithArrayInput(body: kotlin.Array) : Unit {
+ fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit {
val localVariableBody: kotlin.Any? = body
val localVariableQuery: kotlin.collections.Map = mapOf()
val localVariableHeaders: kotlin.collections.Map = mapOf()
@@ -85,7 +85,7 @@ class UserApi(basePath: kotlin.String = "http://petstore.swagger.io/v2") : ApiCl
* @param body List of user object
* @return void
*/
- fun createUsersWithListInput(body: kotlin.Array) : Unit {
+ fun createUsersWithListInput(body: kotlin.collections.List) : Unit {
val localVariableBody: kotlin.Any? = body
val localVariableQuery: kotlin.collections.Map = mapOf()
val localVariableHeaders: kotlin.collections.Map = mapOf()
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiClient.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiClient.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiClient.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiInfrastructureResponse.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiInfrastructureResponse.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiInfrastructureResponse.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApiInfrastructureResponse.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApplicationDelegates.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApplicationDelegates.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApplicationDelegates.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ApplicationDelegates.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Errors.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Errors.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Errors.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Errors.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestConfig.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestConfig.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestConfig.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestMethod.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestMethod.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestMethod.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/RequestMethod.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ResponseExtensions.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ResponseExtensions.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ResponseExtensions.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/ResponseExtensions.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Serializer.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Serializer.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/infrastructure/Serializer.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/ApiResponse.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/ApiResponse.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/ApiResponse.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/ApiResponse.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Category.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Category.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Category.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Category.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Order.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Order.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Order.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Order.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt
similarity index 90%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt
index 210d6258545..31842fa7499 100644
--- a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt
+++ b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Pet.kt
@@ -27,8 +27,8 @@ data class Pet (
val id: kotlin.Long?,
val category: Category?,
val name: kotlin.String,
- val photoUrls: kotlin.Array,
- val tags: kotlin.Array?,
+ val photoUrls: kotlin.collections.List,
+ val tags: kotlin.collections.List?,
/* pet status in the store */
val status: kotlin.String?
)
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Tag.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Tag.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/Tag.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/Tag.kt
diff --git a/samples/client/kotlin/src/main/kotlin/io/swagger/client/models/User.kt b/samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/User.kt
similarity index 100%
rename from samples/client/kotlin/src/main/kotlin/io/swagger/client/models/User.kt
rename to samples/client/petstore/kotlin/src/main/kotlin/io/swagger/client/models/User.kt
diff --git a/samples/client/petstore/kotlin/src/test/kotlin/io/swagger/client/functional/EvaluateTest.kt b/samples/client/petstore/kotlin/src/test/kotlin/io/swagger/client/functional/EvaluateTest.kt
new file mode 100644
index 00000000000..8983641ce38
--- /dev/null
+++ b/samples/client/petstore/kotlin/src/test/kotlin/io/swagger/client/functional/EvaluateTest.kt
@@ -0,0 +1,35 @@
+package io.swagger.client.functional
+
+import io.kotlintest.matchers.should
+import io.kotlintest.matchers.beGreaterThan
+import io.kotlintest.specs.ShouldSpec
+import io.swagger.client.apis.PetApi
+
+class EvaluateTest : ShouldSpec() {
+ init {
+ should("query against pet statuses") {
+ val api = PetApi()
+ val results = api.findPetsByStatus(listOf("available", "pending"))
+
+ results.size should beGreaterThan(1)
+ }
+
+// TODO: Handle default (200) response
+/*
+ should("post data (new pet)") {
+ val api = PetApi()
+ val pet = Pet(
+ id = 0,
+ name = "kotlin client test",
+ category = Category(0, "string"),
+ tags = listOf(Tag(0, "string"))
+ )
+ val result = api.addPet(pet)
+
+ result.name shouldBe(pet.name)
+ result.category shouldBe(pet.category)
+ result.tags shouldBe(pet.tags)
+ }
+*/
+ }
+}
\ No newline at end of file