Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ import com.squareup.moshi.JsonClass
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
{{/enumUnknownDefaultCase}}
import com.fasterxml.jackson.annotation.JsonProperty
{{#hasEnums}}
import com.fasterxml.jackson.annotation.JsonValue
{{/hasEnums}}
{{#discriminator}}
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonSubTypes
Expand Down Expand Up @@ -146,7 +149,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
{{#multiplatform}}
@Serializable
{{/multiplatform}}
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}}{{dataType}}{{/mostInnerItems}}{{/isContainer}}) {
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}enum class {{{nameInPascalCase}}}({{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}{{#jackson}}@get:JsonValue {{/jackson}}val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}{{#mostInnerItems}}{{dataType}}{{/mostInnerItems}}{{/isContainer}}) {
{{#allowableValues}}
{{#enumVars}}
{{^multiplatform}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,7 @@ public void testIntArrayToEnum() throws IOException {

final Path modelKt = Paths.get(output + "/src/main/kotlin/model/ModelWithIntArrayEnum.kt");

TestUtils.assertFileContains(modelKt, "enum class DaysOfWeek(val value: kotlin.Int)");
TestUtils.assertFileContains(modelKt, "enum class DaysOfWeek(@get:JsonValue val value: kotlin.Int)");
}

@Test
Expand All @@ -842,7 +842,7 @@ public void testBooleanConstEnumUsesBooleanLiteral() throws IOException {
final Path modelKt = Paths.get(output + "/src/main/kotlin/model/ExceptionState.kt");

TestUtils.assertFileContains(modelKt,
"enum class ExceptionPeriodIsClosed(val value: kotlin.Boolean)",
"enum class ExceptionPeriodIsClosed(@get:JsonValue val value: kotlin.Boolean)",
"@JsonProperty(value = \"true\")",
"`true`(true);");
TestUtils.assertFileNotContains(modelKt, "`true`(\"true\")");
Expand Down Expand Up @@ -874,6 +874,34 @@ public void testJacksonEnumsUseJsonCreator() throws IOException {
TestUtils.assertFileContains(enumKt, "@JsonCreator");
}

@Test
public void testJacksonNestedEnumsUseJsonValue() throws IOException {
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();

final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("kotlin")
.setLibrary("jvm-retrofit2")
.setAdditionalProperties(new HashMap<>() {{
put(CodegenConstants.SERIALIZATION_LIBRARY, "jackson");
put(CodegenConstants.MODEL_PACKAGE, "model");
}})
.setInputSpec("src/test/resources/3_0/kotlin/issue23886-kotlin-nested-numeric-enum.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));

final ClientOptInput clientOptInput = configurator.toClientOptInput();
DefaultGenerator generator = new DefaultGenerator();

generator.opts(clientOptInput).generate();

final Path modelKt = Paths.get(output + "/src/main/kotlin/model/ExampleModel.kt");

// Without @get:JsonValue, Jackson serializes the Int-valued nested enum by its name instead
// of its numeric value. The import must be present so the generated code compiles.
TestUtils.assertFileContains(modelKt, "import com.fasterxml.jackson.annotation.JsonValue");
TestUtils.assertFileContains(modelKt, "enum class Source(@get:JsonValue val value: kotlin.Int)");
}

@Test
public void testJacksonEnumsThrowForUnknownValue() throws IOException {
File output = Files.createTempDirectory("test").toFile();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
openapi: 3.0.0
info:
title: 'Issue 23886 Jackson nested numeric enum'
version: latest
paths:
'/example':
get:
operationId: getExample
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ExampleModel'
components:
schemas:
ExampleModel:
type: object
properties:
source:
type: integer
format: int32
enum:
- -1
- 0
- 1
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import org.openapitools.client.models.StringEnumRef

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* to test the default value of properties
Expand Down Expand Up @@ -83,7 +84,7 @@ data class DefaultValue (
*
* Values: success,failure,unclassified,unknown_default_open_api
*/
enum class ArrayStringEnumDefault(val value: kotlin.String) {
enum class ArrayStringEnumDefault(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "success") success("success"),
@JsonProperty(value = "failure") failure("failure"),
@JsonProperty(value = "unclassified") unclassified("unclassified"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
*
Expand Down Expand Up @@ -75,7 +76,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
*
Expand Down Expand Up @@ -53,7 +54,7 @@ data class Query (
*
* Values: SUCCESS,FAILURE,SKIPPED,unknown_default_open_api
*/
enum class Outcomes(val value: kotlin.String) {
enum class Outcomes(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "SUCCESS") SUCCESS("SUCCESS"),
@JsonProperty(value = "FAILURE") FAILURE("FAILURE"),
@JsonProperty(value = "SKIPPED") SKIPPED("SKIPPED"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import org.openapitools.client.models.StringEnumRef

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* to test the default value of properties
Expand Down Expand Up @@ -83,7 +84,7 @@ data class DefaultValue (
*
* Values: success,failure,unclassified,unknown_default_open_api
*/
enum class ArrayStringEnumDefault(val value: kotlin.String) {
enum class ArrayStringEnumDefault(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "success") success("success"),
@JsonProperty(value = "failure") failure("failure"),
@JsonProperty(value = "unclassified") unclassified("unclassified"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
*
Expand Down Expand Up @@ -75,7 +76,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
*
Expand Down Expand Up @@ -53,7 +54,7 @@ data class Query (
*
* Values: SUCCESS,FAILURE,SKIPPED,unknown_default_open_api
*/
enum class Outcomes(val value: kotlin.String) {
enum class Outcomes(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "SUCCESS") SUCCESS("SUCCESS"),
@JsonProperty(value = "FAILURE") FAILURE("FAILURE"),
@JsonProperty(value = "SKIPPED") SKIPPED("SKIPPED"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: PLACED,APPROVED,DELIVERED,UNKNOWN_DEFAULT_OPEN_API
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") PLACED("placed"),
@JsonProperty(value = "approved") APPROVED("approved"),
@JsonProperty(value = "delivered") DELIVERED("delivered"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* A pet for sale in the pet store
Expand Down Expand Up @@ -75,7 +76,7 @@ data class Pet (
*
* Values: AVAILABLE,PENDING,SOLD,UNKNOWN_DEFAULT_OPEN_API
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") AVAILABLE("available"),
@JsonProperty(value = "pending") PENDING("pending"),
@JsonProperty(value = "sold") SOLD("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: placed,approved,delivered,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") placed("placed"),
@JsonProperty(value = "approved") approved("approved"),
@JsonProperty(value = "delivered") delivered("delivered"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* A pet for sale in the pet store
Expand Down Expand Up @@ -76,7 +77,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: placed,approved,delivered,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") placed("placed"),
@JsonProperty(value = "approved") approved("approved"),
@JsonProperty(value = "delivered") delivered("delivered"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* A pet for sale in the pet store
Expand Down Expand Up @@ -75,7 +76,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: placed,approved,delivered,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") placed("placed"),
@JsonProperty(value = "approved") approved("approved"),
@JsonProperty(value = "delivered") delivered("delivered"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* A pet for sale in the pet store
Expand Down Expand Up @@ -76,7 +77,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: placed,approved,delivered,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") placed("placed"),
@JsonProperty(value = "approved") approved("approved"),
@JsonProperty(value = "delivered") delivered("delivered"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.openapitools.client.models.Tag

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* A pet for sale in the pet store
Expand Down Expand Up @@ -76,7 +77,7 @@ data class Pet (
*
* Values: available,pending,sold,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "available") available("available"),
@JsonProperty(value = "pending") pending("pending"),
@JsonProperty(value = "sold") sold("sold"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package org.openapitools.client.models

import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue

/**
* An order for a pets from the pet store
Expand Down Expand Up @@ -73,7 +74,7 @@ data class Order (
*
* Values: placed,approved,delivered,unknown_default_open_api
*/
enum class Status(val value: kotlin.String) {
enum class Status(@get:JsonValue val value: kotlin.String) {
@JsonProperty(value = "placed") placed("placed"),
@JsonProperty(value = "approved") approved("approved"),
@JsonProperty(value = "delivered") delivered("delivered"),
Expand Down
Loading
Loading