[kotlin] Support nested enums in models (#5769)

* [kotlin] Add model enum support

Model variables marked isEnum=true are nested class enums. Top-level
enums will not be isEnum=true, but rather have a datatype specific to
the enum's type.

* [kotlin] Regenerate client sample
This commit is contained in:
Jim Schubert 2017-06-04 12:04:58 -04:00 committed by wing328
parent 879149bb69
commit ef07a02a01
12 changed files with 142 additions and 90 deletions

View File

@ -0,0 +1,22 @@
/**
* {{{description}}}
{{#vars}}
* @param {{name}} {{{description}}}
{{/vars}}
*/
data class {{classname}} (
{{#requiredVars}}
{{>data_class_req_var}}{{^-last}},
{{/-last}}{{/requiredVars}}{{#hasRequired}},
{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}},
{{/-last}}{{/optionalVars}}
) {
{{#hasEnums}}{{#vars}}{{#isEnum}}
enum class {{nameInCamelCase}}(val value: {{datatype}}) {
{{#_enum}}
{{{this}}}({{#isString}}"{{/isString}}{{{this}}}{{#isString}}"{{/isString}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
{{/_enum}}
}
{{/isEnum}}{{/vars}}{{/hasEnums}}
}

View File

@ -0,0 +1,4 @@
{{#description}}
/* {{{description}}} */
{{/description}}
val {{{name}}}: {{#isEnum}}{{classname}}.{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}}

View File

@ -0,0 +1,4 @@
{{#description}}
/* {{{description}}} */
{{/description}}
val {{{name}}}: {{#isEnum}}{{classname}}.{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}

View File

@ -0,0 +1,9 @@
/**
* {{{description}}}
* Values: {{#allowableValues}}{{#enumVars}}{{name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}}
*/
enum class {{classname}}(val value: {{dataType}}){
{{#allowableValues}}{{#enumVars}}
{{name}}({{#isString}}"{{/isString}}{{{value}}}{{#isString}}"{{/isString}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
{{/enumVars}}{{/allowableValues}}
)

View File

@ -6,19 +6,6 @@ package {{modelPackage}}
{{#models}} {{#models}}
{{#model}} {{#model}}
/** {{#isEnum}}{{>enum_class}}{{/isEnum}}{{^isEnum}}{{>data_class}}{{/isEnum}}
* {{{description}}}
{{#vars}}
* @param {{name}} {{{description}}}
{{/vars}}
*/
data class {{classname}} (
{{#vars}}
{{#description}}
/* {{{description}}} */
{{/description}}
val {{{name}}}: {{{datatype}}}{{^required}}?{{/required}}{{#hasMore}},{{/hasMore}}
{{/vars}}
)
{{/model}} {{/model}}
{{/models}} {{/models}}

View File

@ -19,7 +19,9 @@ package io.swagger.client.models
* @param message * @param message
*/ */
data class ApiResponse ( data class ApiResponse (
val code: kotlin.Int?, val code: kotlin.Int? = null,
val type: kotlin.String?, val type: kotlin.String? = null,
val message: kotlin.String? val message: kotlin.String? = null
) ) {
}

View File

@ -18,6 +18,8 @@ package io.swagger.client.models
* @param name * @param name
*/ */
data class Category ( data class Category (
val id: kotlin.Long?, val id: kotlin.Long? = null,
val name: kotlin.String? val name: kotlin.String? = null
) ) {
}

View File

@ -22,11 +22,20 @@ package io.swagger.client.models
* @param complete * @param complete
*/ */
data class Order ( data class Order (
val id: kotlin.Long?, val id: kotlin.Long? = null,
val petId: kotlin.Long?, val petId: kotlin.Long? = null,
val quantity: kotlin.Int?, val quantity: kotlin.Int? = null,
val shipDate: java.time.LocalDateTime?, val shipDate: java.time.LocalDateTime? = null,
/* Order Status */ /* Order Status */
val status: kotlin.String?, val status: Order.Status? = null,
val complete: kotlin.Boolean? val complete: kotlin.Boolean? = null
) ) {
enum class Status(val value: kotlin.String) {
placed("placed"),
approved("approved"),
delivered("delivered");
}
}

View File

@ -24,11 +24,20 @@ import io.swagger.client.models.Tag
* @param status pet status in the store * @param status pet status in the store
*/ */
data class Pet ( data class Pet (
val id: kotlin.Long?,
val category: Category?,
val name: kotlin.String, val name: kotlin.String,
val photoUrls: kotlin.collections.List<kotlin.String>, val photoUrls: kotlin.collections.List<kotlin.String>,
val tags: kotlin.collections.List<Tag>?, val id: kotlin.Long? = null,
val category: Category? = null,
val tags: kotlin.collections.List<Tag>? = null,
/* pet status in the store */ /* pet status in the store */
val status: kotlin.String? val status: Pet.Status? = null
) ) {
enum class Status(val value: kotlin.String) {
available("available"),
pending("pending"),
sold("sold");
}
}

View File

@ -18,6 +18,8 @@ package io.swagger.client.models
* @param name * @param name
*/ */
data class Tag ( data class Tag (
val id: kotlin.Long?, val id: kotlin.Long? = null,
val name: kotlin.String? val name: kotlin.String? = null
) ) {
}

View File

@ -24,13 +24,15 @@ package io.swagger.client.models
* @param userStatus User Status * @param userStatus User Status
*/ */
data class User ( data class User (
val id: kotlin.Long?, val id: kotlin.Long? = null,
val username: kotlin.String?, val username: kotlin.String? = null,
val firstName: kotlin.String?, val firstName: kotlin.String? = null,
val lastName: kotlin.String?, val lastName: kotlin.String? = null,
val email: kotlin.String?, val email: kotlin.String? = null,
val password: kotlin.String?, val password: kotlin.String? = null,
val phone: kotlin.String?, val phone: kotlin.String? = null,
/* User Status */ /* User Status */
val userStatus: kotlin.Int? val userStatus: kotlin.Int? = null
) ) {
}

View File

@ -9,7 +9,7 @@ class EvaluateTest : ShouldSpec() {
init { init {
should("query against pet statuses") { should("query against pet statuses") {
val api = PetApi() val api = PetApi()
val results = api.findPetsByStatus(listOf("available", "pending")) val results = api.findPetsByStatus(listOf("sold"))
results.size should beGreaterThan(1) results.size should beGreaterThan(1)
} }