From aaa32d07195f66a0d8b68ef1058606fa869d1bb6 Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Wed, 20 Aug 2025 10:44:24 +0200 Subject: [PATCH 1/8] Test Cases for more than two oneOf-Options (both passing, but important to narrow down observed bug) --- .../codegen/DefaultCodegenTest.java | 31 +++++++- .../src/test/resources/3_0/oneOf.yaml | 7 ++ .../test/resources/3_0/oneOf_inheritance.yaml | 70 +++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index ed4287ab0fc0..db834d067e4f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -766,9 +766,10 @@ public void testComposedSchemaOneOfWithProperties() { Set oneOf = new TreeSet<>(); oneOf.add("Apple"); oneOf.add("Banana"); + oneOf.add("Orange"); assertEquals(fruit.oneOf, oneOf); - assertEquals(3, fruit.optionalVars.size()); - assertEquals(3, fruit.vars.size()); + assertEquals(4, fruit.optionalVars.size()); + assertEquals(4, fruit.vars.size()); // make sure that fruit has the property color boolean colorSeen = false; for (CodegenProperty cp : fruit.vars) { @@ -788,6 +789,32 @@ public void testComposedSchemaOneOfWithProperties() { assertTrue(colorSeen); } + @Test + public void testComposedSchemaOneOfAllOf() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + + final Schema schema = openAPI.getComponents().getSchemas().get("RandomAnimalsResponse_animals_inner"); + codegen.setOpenAPI(openAPI); + CodegenModel randomAnimalsResponseInner = codegen.fromModel("RandomAnimalsResponse_animals_inner", schema); + + Set oneOf = new TreeSet<>(); + oneOf.add("Mouse"); + oneOf.add("Cat"); + oneOf.add("Dog"); + assertEquals(oneOf, randomAnimalsResponseInner.oneOf); + assertEquals(4, randomAnimalsResponseInner.vars.size()); + // make sure that RandomAnimalsResponseInner has the property species + boolean speciesSeen = false; + for (CodegenProperty cp : randomAnimalsResponseInner.vars) { + if ("species".equals(cp.name)) { + speciesSeen = true; + break; + } + } + assertTrue(speciesSeen); + } + @Test public void testEscapeText() { final DefaultCodegen codegen = new DefaultCodegen(); diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml index b9f0938421eb..4aff70b18f28 100644 --- a/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml @@ -22,6 +22,7 @@ components: oneOf: - $ref: '#/components/schemas/apple' - $ref: '#/components/schemas/banana' + - $ref: '#/components/schemas/orange' # additionalProperties: # type: string # uncomment this when https://github.com/swagger-api/swagger-parser/issues/1252 is resolved @@ -37,3 +38,9 @@ components: properties: count: type: number + orange: + title: orange + type: object + properties: + sweet: + type: boolean diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml new file mode 100644 index 000000000000..1162ce4e59ad --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml @@ -0,0 +1,70 @@ +--- +openapi: 3.0.3 +info: + title: randimals + version: "1.0" +paths: + /random-animals: + get: + tags: + - Random Animals Resource + responses: + "200": + description: OK + content: + '*/*': + schema: + $ref: '#/components/schemas/RandomAnimalsResponse' +components: + schemas: + RandomAnimalsResponse: + type: object + properties: + animals: + type: array + items: + oneOf: + - $ref: '#/components/schemas/Dog' + - $ref: '#/components/schemas/Cat' + - $ref: '#/components/schemas/Mouse' + required: + - animals + Dog: + allOf: + - $ref: '#/components/schemas/Animal' + - type: object + properties: + dogId: + type: string + required: + - dogId + Animal: + discriminator: + propertyName: species + mapping: + Dog: '#/components/schemas/Dog' + Cat: '#/components/schemas/Cat' + Mouse: '#/components/schemas/Mouse' + properties: + species: + type: string + required: + - species + Cat: + allOf: + - $ref: '#/components/schemas/Animal' + - type: object + properties: + catId: + type: string + required: + - catId + Mouse: + allOf: + - $ref: '#/components/schemas/Mouse' + - type: object + properties: + mouseId: + type: string + required: + - mouseId \ No newline at end of file From 08bd2ccafa917f34c4a373478e62619da7e71b12 Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Wed, 20 Aug 2025 15:55:02 +0200 Subject: [PATCH 2/8] fix language-specific tests broken by adding a third fruit to oneOf test --- .../org/openapitools/codegen/ruby/RubyClientCodegenTest.java | 1 + .../src/test/resources/3_0/protobuf-schema/fruitOneOf.proto | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java index 348be771a651..dc1db42fae02 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java @@ -368,6 +368,7 @@ public void oneOfTest() { Set oneOf = new TreeSet(); oneOf.add("Apple"); oneOf.add("Banana"); + oneOf.add("Orange"); Assert.assertEquals(fruit.oneOf, oneOf); } diff --git a/modules/openapi-generator/src/test/resources/3_0/protobuf-schema/fruitOneOf.proto b/modules/openapi-generator/src/test/resources/3_0/protobuf-schema/fruitOneOf.proto index f73dd578ba1b..cf30729e6b26 100644 --- a/modules/openapi-generator/src/test/resources/3_0/protobuf-schema/fruitOneOf.proto +++ b/modules/openapi-generator/src/test/resources/3_0/protobuf-schema/fruitOneOf.proto @@ -14,14 +14,13 @@ package openapitools; import public "models/apple.proto"; import public "models/banana.proto"; +import public "models/orange.proto"; message Fruit { oneof fruit { Apple apple = 93029210; - Banana banana = 322613405; - + Orange orange = 471980499; } - } \ No newline at end of file From 4f94561f8d73890ca2ebf67602ab628ccdde8ff7 Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Wed, 20 Aug 2025 16:03:00 +0200 Subject: [PATCH 3/8] create reproducer unit test for java client codegen --- .../codegen/java/JavaClientCodegenTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 0b84b410fae0..46aecd499cab 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -40,12 +40,14 @@ import org.openapitools.codegen.java.assertions.JavaFileAssert; import org.openapitools.codegen.languages.AbstractJavaCodegen; import org.openapitools.codegen.languages.JavaClientCodegen; +import org.openapitools.codegen.languages.RubyClientCodegen; import org.openapitools.codegen.languages.features.BeanValidationFeatures; import org.openapitools.codegen.languages.features.CXFServerFeatures; import org.openapitools.codegen.meta.features.SecurityFeature; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; import org.openapitools.codegen.testutils.ConfigAssert; +import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Parameters; import org.testng.annotations.Test; @@ -67,6 +69,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.api.InstanceOfAssertFactories.FILE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.TestUtils.*; import static org.openapitools.codegen.languages.JavaClientCodegen.*; @@ -3837,4 +3841,49 @@ public void queryParameterJsonSerialization(String library) { public static Object[] springClients() { return new Object[]{RESTCLIENT, WEBCLIENT}; } + + @Test(description = "test oneOf (OAS3)") + public void oneOfTest() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf.yaml"); + final JavaClientCodegen codegen = new JavaClientCodegen(); + + final Schema schema = openAPI.getComponents().getSchemas().get("fruit"); + codegen.setOpenAPI(openAPI); + CodegenModel fruit = codegen.fromModel("Fruit", schema); + + Set oneOf = new TreeSet(); + oneOf.add("Apple"); + oneOf.add("Banana"); + oneOf.add("Orange"); + Assert.assertEquals(fruit.oneOf, oneOf); + + assertEquals(4, fruit.optionalVars.size()); + assertEquals(4, fruit.vars.size()); + } + + @Test + public void oneOfInheritanceArrayFieldTest() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + final JavaClientCodegen codegen = new JavaClientCodegen(); + + final Schema schema = openAPI.getComponents().getSchemas().get("RandomAnimalsResponse_animals_inner"); + codegen.setOpenAPI(openAPI); + CodegenModel randomAnimalsResponseInner = codegen.fromModel("RandomAnimalsResponse_animals_inner", schema); + + Set oneOf = new TreeSet<>(); + oneOf.add("Mouse"); + oneOf.add("Cat"); + oneOf.add("Dog"); + assertEquals(oneOf, randomAnimalsResponseInner.oneOf); + assertEquals(4, randomAnimalsResponseInner.vars.size()); + // make sure that RandomAnimalsResponseInner has the property species + boolean speciesSeen = false; + for (CodegenProperty cp : randomAnimalsResponseInner.vars) { + if ("species".equals(cp.name)) { + speciesSeen = true; + break; + } + } + assertTrue(speciesSeen); + } } \ No newline at end of file From 4ab885032154d0d1e703bf95bf82d8f7851cda3c Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Thu, 21 Aug 2025 16:03:41 +0200 Subject: [PATCH 4/8] fix typo in test yaml --- .../src/test/resources/3_0/oneOf_inheritance.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml index 1162ce4e59ad..45fa21a28bb6 100644 --- a/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml @@ -61,7 +61,7 @@ components: - catId Mouse: allOf: - - $ref: '#/components/schemas/Mouse' + - $ref: '#/components/schemas/Animal' - type: object properties: mouseId: From ddabfdcd611955ca64b70c8f7da5c6cda2ebc47a Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Fri, 22 Aug 2025 14:49:42 +0200 Subject: [PATCH 5/8] fix ModelUtils.getParentName returning name of first element in composed schema instead of null when there are multiple elements and it is not clear which one should be parent --- .../org/openapitools/codegen/utils/ModelUtils.java | 11 +++++++++-- .../openapitools/codegen/utils/ModelUtilsTest.java | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index a979dff275fb..82ba131f2b14 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -1573,6 +1573,7 @@ public static String getParentName(Schema composedSchema, Map al List refedWithoutDiscriminator = new ArrayList<>(); if (interfaces != null && !interfaces.isEmpty()) { + List parentNameCandidates = new ArrayList<>(interfaces.size()); for (Schema schema : interfaces) { // get the actual schema if (StringUtils.isNotEmpty(schema.get$ref())) { @@ -1580,10 +1581,10 @@ public static String getParentName(Schema composedSchema, Map al Schema s = allSchemas.get(parentName); if (s == null) { LOGGER.error("Failed to obtain schema from {}", parentName); - return "UNKNOWN_PARENT_NAME"; + parentNameCandidates.add("UNKNOWN_PARENT_NAME"); } else if (hasOrInheritsDiscriminator(s, allSchemas, new ArrayList())) { // discriminator.propertyName is used or x-parent is used - return parentName; + parentNameCandidates.add(parentName); } else { // not a parent since discriminator.propertyName or x-parent is not set hasAmbiguousParents = true; @@ -1600,6 +1601,12 @@ public static String getParentName(Schema composedSchema, Map al } } } + if (parentNameCandidates.size() > 1) { + // unclear which one should be the parent + return null; + } else if (parentNameCandidates.size() == 1) { + return parentNameCandidates.get(0); + } if (refedWithoutDiscriminator.size() == 1 && nullSchemaChildrenCount == 1) { // One schema is a $ref and the other is the 'null' type, so the parent is obvious. // In this particular case there is no need to specify a discriminator. diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java index 44e0e0083686..7a9f440f8f39 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java @@ -675,4 +675,12 @@ public void testModelWithPropertiesOnly() { testSchema.setAdditionalProperties(new Schema().type("string")); assertFalse(ModelUtils.isModelWithPropertiesOnly(testSchema)); } + + @Test + public void getParentNameMultipleInterfacesTest() { + OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + Map allSchemas = openAPI.getComponents().getSchemas(); + Schema composedSchema = allSchemas.get("RandomAnimalsResponse_animals_inner"); + assertNull(ModelUtils.getParentName(composedSchema, allSchemas)); + } } From 3c27bac25c62627fff1f9b157de3e6c7f0b6692d Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Fri, 22 Aug 2025 16:23:29 +0200 Subject: [PATCH 6/8] rename test yaml and added tests for clarity --- .../java/org/openapitools/codegen/DefaultCodegenTest.java | 4 ++-- .../org/openapitools/codegen/java/JavaClientCodegenTest.java | 4 ++-- .../java/org/openapitools/codegen/utils/ModelUtilsTest.java | 2 +- .../3_0/{oneOf_inheritance.yaml => oneOf_innerModel.yaml} | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename modules/openapi-generator/src/test/resources/3_0/{oneOf_inheritance.yaml => oneOf_innerModel.yaml} (100%) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index db834d067e4f..e0ba3c63a2f5 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -790,8 +790,8 @@ public void testComposedSchemaOneOfWithProperties() { } @Test - public void testComposedSchemaOneOfAllOf() { - final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + public void testComposedSchemaOneOfWithInnerModel() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_innerModel.yaml"); final DefaultCodegen codegen = new DefaultCodegen(); final Schema schema = openAPI.getComponents().getSchemas().get("RandomAnimalsResponse_animals_inner"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 46aecd499cab..24d02b510e81 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -3862,8 +3862,8 @@ public void oneOfTest() { } @Test - public void oneOfInheritanceArrayFieldTest() { - final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + public void oneOfWithInnerModelTest() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_innerModel.yaml"); final JavaClientCodegen codegen = new JavaClientCodegen(); final Schema schema = openAPI.getComponents().getSchemas().get("RandomAnimalsResponse_animals_inner"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java index 7a9f440f8f39..fdefc16c5b4d 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java @@ -678,7 +678,7 @@ public void testModelWithPropertiesOnly() { @Test public void getParentNameMultipleInterfacesTest() { - OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_inheritance.yaml"); + OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_innerModel.yaml"); Map allSchemas = openAPI.getComponents().getSchemas(); Schema composedSchema = allSchemas.get("RandomAnimalsResponse_animals_inner"); assertNull(ModelUtils.getParentName(composedSchema, allSchemas)); diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf_innerModel.yaml similarity index 100% rename from modules/openapi-generator/src/test/resources/3_0/oneOf_inheritance.yaml rename to modules/openapi-generator/src/test/resources/3_0/oneOf_innerModel.yaml From e0786cdf2ad9475adb6eb1d7e9a5f3b143e3075e Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Mon, 1 Sep 2025 10:08:22 +0200 Subject: [PATCH 7/8] update samples --- .../net4.7/OneOf/.openapi-generator/FILES | 3 + .../generichost/net4.7/OneOf/api/openapi.yaml | 7 + .../net4.7/OneOf/docs/models/Orange.md | 10 + .../Model/OrangeTests.cs | 65 +++++++ .../Client/HostConfiguration.cs | 1 + .../OneOf/src/Org.OpenAPITools/Model/Fruit.cs | 24 +++ .../src/Org.OpenAPITools/Model/Orange.cs | 171 +++++++++++++++++ .../net4.8/OneOf/.openapi-generator/FILES | 3 + .../generichost/net4.8/OneOf/api/openapi.yaml | 7 + .../net4.8/OneOf/docs/models/Orange.md | 10 + .../Model/OrangeTests.cs | 65 +++++++ .../Client/HostConfiguration.cs | 1 + .../OneOf/src/Org.OpenAPITools/Model/Fruit.cs | 24 +++ .../src/Org.OpenAPITools/Model/Orange.cs | 171 +++++++++++++++++ .../net8/OneOf/.openapi-generator/FILES | 3 + .../generichost/net8/OneOf/api/openapi.yaml | 7 + .../net8/OneOf/docs/models/Orange.md | 10 + .../Model/OrangeTests.cs | 65 +++++++ .../Client/HostConfiguration.cs | 1 + .../OneOf/src/Org.OpenAPITools/Model/Fruit.cs | 24 +++ .../src/Org.OpenAPITools/Model/Orange.cs | 173 ++++++++++++++++++ .../net9/OneOf/.openapi-generator/FILES | 3 + .../generichost/net9/OneOf/api/openapi.yaml | 7 + .../net9/OneOf/docs/models/Orange.md | 10 + .../Model/OrangeTests.cs | 65 +++++++ .../Client/HostConfiguration.cs | 1 + .../OneOf/src/Org.OpenAPITools/Model/Fruit.cs | 24 +++ .../src/Org.OpenAPITools/Model/Orange.cs | 173 ++++++++++++++++++ .../net9/Petstore/docs/NullableShape.md | 1 + .../httpclient/net9/Petstore/docs/Shape.md | 1 + .../net9/Petstore/docs/ShapeOrNull.md | 1 + .../Petstore/docs/NullableShape.md | 1 + .../standard2.0/Petstore/docs/Shape.md | 1 + .../standard2.0/Petstore/docs/ShapeOrNull.md | 1 + .../net4.7/Petstore/docs/NullableShape.md | 1 + .../restsharp/net4.7/Petstore/docs/Shape.md | 1 + .../net4.7/Petstore/docs/ShapeOrNull.md | 1 + .../net4.8/Petstore/docs/NullableShape.md | 1 + .../restsharp/net4.8/Petstore/docs/Shape.md | 1 + .../net4.8/Petstore/docs/ShapeOrNull.md | 1 + .../net8/EnumMappings/docs/NullableShape.md | 1 + .../restsharp/net8/EnumMappings/docs/Shape.md | 1 + .../net8/EnumMappings/docs/ShapeOrNull.md | 1 + .../net8/Petstore/docs/NullableShape.md | 1 + .../restsharp/net8/Petstore/docs/Shape.md | 1 + .../net8/Petstore/docs/ShapeOrNull.md | 1 + .../net9/EnumMappings/docs/NullableShape.md | 1 + .../restsharp/net9/EnumMappings/docs/Shape.md | 1 + .../net9/EnumMappings/docs/ShapeOrNull.md | 1 + .../docs/NullableShape.md | 1 + .../ConditionalSerialization/docs/Shape.md | 1 + .../docs/ShapeOrNull.md | 1 + .../Petstore/docs/NullableShape.md | 1 + .../standard2.0/Petstore/docs/Shape.md | 1 + .../standard2.0/Petstore/docs/ShapeOrNull.md | 1 + .../net9/Petstore/docs/NullableShape.md | 1 + .../net9/Petstore/docs/Shape.md | 1 + .../net9/Petstore/docs/ShapeOrNull.md | 1 + .../Petstore/docs/NullableShape.md | 1 + .../standard2.0/Petstore/docs/Shape.md | 1 + .../standard2.0/Petstore/docs/ShapeOrNull.md | 1 + .../java/okhttp-gson/docs/NullableShape.md | 1 + .../petstore/java/okhttp-gson/docs/Shape.md | 1 + .../java/okhttp-gson/docs/ShapeOrNull.md | 1 + .../lib/WWW/OpenAPIClient/Object/Adult.pm | 26 +-- .../swift5/oneOf/.openapi-generator/FILES | 2 + .../Classes/OpenAPIs/Models/Fruit.swift | 5 + .../Classes/OpenAPIs/Models/Orange.swift | 32 ++++ .../client/petstore/swift5/oneOf/README.md | 1 + .../petstore/swift5/oneOf/docs/Fruit.md | 1 + .../petstore/swift5/oneOf/docs/Orange.md | 11 ++ .../swift6/oneOf/.openapi-generator/FILES | 2 + .../Classes/OpenAPIs/Models/Fruit.swift | 5 + .../Classes/OpenAPIs/Models/Orange.swift | 29 +++ .../client/petstore/swift6/oneOf/README.md | 1 + .../petstore/swift6/oneOf/docs/Fruit.md | 1 + .../petstore/swift6/oneOf/docs/Orange.md | 11 ++ .../test-petstore/docs/NullableShape.md | 2 + .../builds/test-petstore/docs/Shape.md | 2 + .../builds/test-petstore/docs/ShapeOrNull.md | 2 + .../dart-dio/oneof/.openapi-generator/FILES | 3 + .../client/petstore/dart-dio/oneof/README.md | 1 + .../petstore/dart-dio/oneof/doc/Fruit.md | 1 + .../petstore/dart-dio/oneof/doc/Orange.md | 15 ++ .../petstore/dart-dio/oneof/lib/openapi.dart | 1 + .../dart-dio/oneof/lib/src/model/fruit.dart | 6 +- .../dart-dio/oneof/lib/src/model/orange.dart | 108 +++++++++++ .../dart-dio/oneof/lib/src/serializers.dart | 2 + .../dart-dio/oneof/test/orange_test.dart | 16 ++ 89 files changed, 1423 insertions(+), 27 deletions(-) create mode 100644 samples/client/petstore/csharp/generichost/net4.7/OneOf/docs/models/Orange.md create mode 100644 samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs create mode 100644 samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Orange.cs create mode 100644 samples/client/petstore/csharp/generichost/net4.8/OneOf/docs/models/Orange.md create mode 100644 samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs create mode 100644 samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Orange.cs create mode 100644 samples/client/petstore/csharp/generichost/net8/OneOf/docs/models/Orange.md create mode 100644 samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs create mode 100644 samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Orange.cs create mode 100644 samples/client/petstore/csharp/generichost/net9/OneOf/docs/models/Orange.md create mode 100644 samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs create mode 100644 samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Orange.cs create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift create mode 100644 samples/client/petstore/swift5/oneOf/docs/Orange.md create mode 100644 samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift create mode 100644 samples/client/petstore/swift6/oneOf/docs/Orange.md create mode 100644 samples/openapi3/client/petstore/dart-dio/oneof/doc/Orange.md create mode 100644 samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/orange.dart create mode 100644 samples/openapi3/client/petstore/dart-dio/oneof/test/orange_test.dart diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES index 59cc1ea25a08..3135e2dd60d1 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES @@ -7,9 +7,11 @@ docs/apis/DefaultApi.md docs/models/Apple.md docs/models/Banana.md docs/models/Fruit.md +docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs @@ -36,5 +38,6 @@ src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs src/Org.OpenAPITools/Model/Apple.cs src/Org.OpenAPITools/Model/Banana.cs src/Org.OpenAPITools/Model/Fruit.cs +src/Org.OpenAPITools/Model/Orange.cs src/Org.OpenAPITools/Org.OpenAPITools.csproj src/Org.OpenAPITools/README.md diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.7/OneOf/api/openapi.yaml index 556bd8fae459..6b5b3ec6e8cf 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/api/openapi.yaml @@ -22,6 +22,7 @@ components: oneOf: - $ref: "#/components/schemas/apple" - $ref: "#/components/schemas/banana" + - $ref: "#/components/schemas/orange" properties: color: type: string @@ -38,4 +39,10 @@ components: type: number title: banana type: object + orange: + properties: + sweet: + type: boolean + title: orange + type: object diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/docs/models/Orange.md b/samples/client/petstore/csharp/generichost/net4.7/OneOf/docs/models/Orange.md new file mode 100644 index 000000000000..cac616b565dc --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/docs/models/Orange.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Orange + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Sweet** | **bool** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs new file mode 100644 index 000000000000..6471b6cfba37 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs @@ -0,0 +1,65 @@ +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing Orange + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class OrangeTests : IDisposable + { + // TODO uncomment below to declare an instance variable for Orange + //private Orange instance; + + public OrangeTests() + { + // TODO uncomment below to create an instance of Orange + //instance = new Orange(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of Orange + /// + [Fact] + public void OrangeInstanceTest() + { + // TODO uncomment below to test "IsType" Orange + //Assert.IsType(instance); + } + + /// + /// Test the property 'Sweet' + /// + [Fact] + public void SweetTest() + { + // TODO unit test for the property 'Sweet' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs index 6e6cadc2371f..dea8c2a11c73 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -42,6 +42,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new AppleJsonConverter()); _jsonOptions.Converters.Add(new BananaJsonConverter()); _jsonOptions.Converters.Add(new FruitJsonConverter()); + _jsonOptions.Converters.Add(new OrangeJsonConverter()); JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new JsonSerializerOptionsProvider(_jsonOptions); _services.AddSingleton(jsonSerializerOptionsProvider); _services.AddSingleton(); diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index 1d1c7c5388c0..60c5a493515e 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -53,6 +53,18 @@ public Fruit(Banana banana, Option color = default) OnCreated(); } + /// + /// Initializes a new instance of the class. + /// + /// + /// color + public Fruit(Orange orange, Option color = default) + { + Orange = orange; + ColorOption = color; + OnCreated(); + } + partial void OnCreated(); /// @@ -65,6 +77,11 @@ public Fruit(Banana banana, Option color = default) /// public Banana Banana { get; set; } + /// + /// Gets or Sets Orange + /// + public Orange Orange { get; set; } + /// /// Used to track the state of Color /// @@ -135,6 +152,7 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Apple apple = default; Banana banana = default; + Orange orange = default; Utf8JsonReader utf8JsonReaderOneOf = utf8JsonReader; while (utf8JsonReaderOneOf.Read()) @@ -152,6 +170,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Utf8JsonReader utf8JsonReaderBanana = utf8JsonReader; ClientUtils.TryDeserialize(ref utf8JsonReaderBanana, jsonSerializerOptions, out banana); + + Utf8JsonReader utf8JsonReaderOrange = utf8JsonReader; + ClientUtils.TryDeserialize(ref utf8JsonReaderOrange, jsonSerializerOptions, out orange); } } @@ -188,6 +209,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert if (banana != null) return new Fruit(banana, color); + if (orange != null) + return new Fruit(orange, color); + throw new JsonException(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Orange.cs b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Orange.cs new file mode 100644 index 000000000000..8c864071b6df --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Orange.cs @@ -0,0 +1,171 @@ +// +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// Orange + /// + public partial class Orange : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// sweet + [JsonConstructor] + public Orange(Option sweet = default) + { + SweetOption = sweet; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of Sweet + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option SweetOption { get; private set; } + + /// + /// Gets or Sets Sweet + /// + [JsonPropertyName("sweet")] + public bool? Sweet { get { return this.SweetOption; } set { this.SweetOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class Orange {\n"); + sb.Append(" Sweet: ").Append(Sweet).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class OrangeJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override Orange Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option sweet = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "sweet": + sweet = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (bool?)null : utf8JsonReader.GetBoolean()); + break; + default: + break; + } + } + } + + if (sweet.IsSet && sweet.Value == null) + throw new ArgumentNullException(nameof(sweet), "Property is not nullable for class Orange."); + + return new Orange(sweet); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, orange, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + if (orange.SweetOption.IsSet) + writer.WriteBoolean("sweet", orange.SweetOption.Value.Value); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES index 59cc1ea25a08..3135e2dd60d1 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES @@ -7,9 +7,11 @@ docs/apis/DefaultApi.md docs/models/Apple.md docs/models/Banana.md docs/models/Fruit.md +docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs @@ -36,5 +38,6 @@ src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs src/Org.OpenAPITools/Model/Apple.cs src/Org.OpenAPITools/Model/Banana.cs src/Org.OpenAPITools/Model/Fruit.cs +src/Org.OpenAPITools/Model/Orange.cs src/Org.OpenAPITools/Org.OpenAPITools.csproj src/Org.OpenAPITools/README.md diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.8/OneOf/api/openapi.yaml index 556bd8fae459..6b5b3ec6e8cf 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/api/openapi.yaml @@ -22,6 +22,7 @@ components: oneOf: - $ref: "#/components/schemas/apple" - $ref: "#/components/schemas/banana" + - $ref: "#/components/schemas/orange" properties: color: type: string @@ -38,4 +39,10 @@ components: type: number title: banana type: object + orange: + properties: + sweet: + type: boolean + title: orange + type: object diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/docs/models/Orange.md b/samples/client/petstore/csharp/generichost/net4.8/OneOf/docs/models/Orange.md new file mode 100644 index 000000000000..cac616b565dc --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/docs/models/Orange.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Orange + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Sweet** | **bool** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs new file mode 100644 index 000000000000..6471b6cfba37 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs @@ -0,0 +1,65 @@ +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing Orange + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class OrangeTests : IDisposable + { + // TODO uncomment below to declare an instance variable for Orange + //private Orange instance; + + public OrangeTests() + { + // TODO uncomment below to create an instance of Orange + //instance = new Orange(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of Orange + /// + [Fact] + public void OrangeInstanceTest() + { + // TODO uncomment below to test "IsType" Orange + //Assert.IsType(instance); + } + + /// + /// Test the property 'Sweet' + /// + [Fact] + public void SweetTest() + { + // TODO unit test for the property 'Sweet' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs index 6e6cadc2371f..dea8c2a11c73 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -42,6 +42,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new AppleJsonConverter()); _jsonOptions.Converters.Add(new BananaJsonConverter()); _jsonOptions.Converters.Add(new FruitJsonConverter()); + _jsonOptions.Converters.Add(new OrangeJsonConverter()); JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new JsonSerializerOptionsProvider(_jsonOptions); _services.AddSingleton(jsonSerializerOptionsProvider); _services.AddSingleton(); diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index 1d1c7c5388c0..60c5a493515e 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -53,6 +53,18 @@ public Fruit(Banana banana, Option color = default) OnCreated(); } + /// + /// Initializes a new instance of the class. + /// + /// + /// color + public Fruit(Orange orange, Option color = default) + { + Orange = orange; + ColorOption = color; + OnCreated(); + } + partial void OnCreated(); /// @@ -65,6 +77,11 @@ public Fruit(Banana banana, Option color = default) /// public Banana Banana { get; set; } + /// + /// Gets or Sets Orange + /// + public Orange Orange { get; set; } + /// /// Used to track the state of Color /// @@ -135,6 +152,7 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Apple apple = default; Banana banana = default; + Orange orange = default; Utf8JsonReader utf8JsonReaderOneOf = utf8JsonReader; while (utf8JsonReaderOneOf.Read()) @@ -152,6 +170,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Utf8JsonReader utf8JsonReaderBanana = utf8JsonReader; ClientUtils.TryDeserialize(ref utf8JsonReaderBanana, jsonSerializerOptions, out banana); + + Utf8JsonReader utf8JsonReaderOrange = utf8JsonReader; + ClientUtils.TryDeserialize(ref utf8JsonReaderOrange, jsonSerializerOptions, out orange); } } @@ -188,6 +209,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert if (banana != null) return new Fruit(banana, color); + if (orange != null) + return new Fruit(orange, color); + throw new JsonException(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Orange.cs b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Orange.cs new file mode 100644 index 000000000000..8c864071b6df --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Orange.cs @@ -0,0 +1,171 @@ +// +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// Orange + /// + public partial class Orange : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// sweet + [JsonConstructor] + public Orange(Option sweet = default) + { + SweetOption = sweet; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of Sweet + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option SweetOption { get; private set; } + + /// + /// Gets or Sets Sweet + /// + [JsonPropertyName("sweet")] + public bool? Sweet { get { return this.SweetOption; } set { this.SweetOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class Orange {\n"); + sb.Append(" Sweet: ").Append(Sweet).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class OrangeJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override Orange Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option sweet = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "sweet": + sweet = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (bool?)null : utf8JsonReader.GetBoolean()); + break; + default: + break; + } + } + } + + if (sweet.IsSet && sweet.Value == null) + throw new ArgumentNullException(nameof(sweet), "Property is not nullable for class Orange."); + + return new Orange(sweet); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, orange, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + if (orange.SweetOption.IsSet) + writer.WriteBoolean("sweet", orange.SweetOption.Value.Value); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES index dc42a5d47091..3cc89cbec659 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES @@ -7,9 +7,11 @@ docs/apis/DefaultApi.md docs/models/Apple.md docs/models/Banana.md docs/models/Fruit.md +docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs @@ -38,5 +40,6 @@ src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs src/Org.OpenAPITools/Model/Apple.cs src/Org.OpenAPITools/Model/Banana.cs src/Org.OpenAPITools/Model/Fruit.cs +src/Org.OpenAPITools/Model/Orange.cs src/Org.OpenAPITools/Org.OpenAPITools.csproj src/Org.OpenAPITools/README.md diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net8/OneOf/api/openapi.yaml index 556bd8fae459..6b5b3ec6e8cf 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/api/openapi.yaml @@ -22,6 +22,7 @@ components: oneOf: - $ref: "#/components/schemas/apple" - $ref: "#/components/schemas/banana" + - $ref: "#/components/schemas/orange" properties: color: type: string @@ -38,4 +39,10 @@ components: type: number title: banana type: object + orange: + properties: + sweet: + type: boolean + title: orange + type: object diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/docs/models/Orange.md b/samples/client/petstore/csharp/generichost/net8/OneOf/docs/models/Orange.md new file mode 100644 index 000000000000..cac616b565dc --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/docs/models/Orange.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Orange + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Sweet** | **bool** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs new file mode 100644 index 000000000000..6471b6cfba37 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs @@ -0,0 +1,65 @@ +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing Orange + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class OrangeTests : IDisposable + { + // TODO uncomment below to declare an instance variable for Orange + //private Orange instance; + + public OrangeTests() + { + // TODO uncomment below to create an instance of Orange + //instance = new Orange(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of Orange + /// + [Fact] + public void OrangeInstanceTest() + { + // TODO uncomment below to test "IsType" Orange + //Assert.IsType(instance); + } + + /// + /// Test the property 'Sweet' + /// + [Fact] + public void SweetTest() + { + // TODO unit test for the property 'Sweet' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs index 2e37448fb7d8..9e79cf0877cf 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -46,6 +46,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new AppleJsonConverter()); _jsonOptions.Converters.Add(new BananaJsonConverter()); _jsonOptions.Converters.Add(new FruitJsonConverter()); + _jsonOptions.Converters.Add(new OrangeJsonConverter()); JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new(_jsonOptions); _services.AddSingleton(jsonSerializerOptionsProvider); _services.AddSingleton(); diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index d58b2b4db1dd..056f2c03af8d 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -55,6 +55,18 @@ public Fruit(Banana banana, Option color = default) OnCreated(); } + /// + /// Initializes a new instance of the class. + /// + /// + /// color + public Fruit(Orange orange, Option color = default) + { + Orange = orange; + ColorOption = color; + OnCreated(); + } + partial void OnCreated(); /// @@ -67,6 +79,11 @@ public Fruit(Banana banana, Option color = default) /// public Banana? Banana { get; set; } + /// + /// Gets or Sets Orange + /// + public Orange? Orange { get; set; } + /// /// Used to track the state of Color /// @@ -137,6 +154,7 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Apple? apple = default; Banana? banana = default; + Orange? orange = default; Utf8JsonReader utf8JsonReaderOneOf = utf8JsonReader; while (utf8JsonReaderOneOf.Read()) @@ -154,6 +172,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Utf8JsonReader utf8JsonReaderBanana = utf8JsonReader; ClientUtils.TryDeserialize(ref utf8JsonReaderBanana, jsonSerializerOptions, out banana); + + Utf8JsonReader utf8JsonReaderOrange = utf8JsonReader; + ClientUtils.TryDeserialize(ref utf8JsonReaderOrange, jsonSerializerOptions, out orange); } } @@ -190,6 +211,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert if (banana != null) return new Fruit(banana, color); + if (orange != null) + return new Fruit(orange, color); + throw new JsonException(); } diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Orange.cs b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Orange.cs new file mode 100644 index 000000000000..eaa0165ba6c1 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Orange.cs @@ -0,0 +1,173 @@ +// +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// Orange + /// + public partial class Orange : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// sweet + [JsonConstructor] + public Orange(Option sweet = default) + { + SweetOption = sweet; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of Sweet + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option SweetOption { get; private set; } + + /// + /// Gets or Sets Sweet + /// + [JsonPropertyName("sweet")] + public bool? Sweet { get { return this.SweetOption; } set { this.SweetOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class Orange {\n"); + sb.Append(" Sweet: ").Append(Sweet).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class OrangeJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override Orange Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option sweet = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "sweet": + sweet = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (bool?)null : utf8JsonReader.GetBoolean()); + break; + default: + break; + } + } + } + + if (sweet.IsSet && sweet.Value == null) + throw new ArgumentNullException(nameof(sweet), "Property is not nullable for class Orange."); + + return new Orange(sweet); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, orange, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + if (orange.SweetOption.IsSet) + writer.WriteBoolean("sweet", orange.SweetOption.Value!.Value); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES index dc42a5d47091..3cc89cbec659 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES @@ -7,9 +7,11 @@ docs/apis/DefaultApi.md docs/models/Apple.md docs/models/Banana.md docs/models/Fruit.md +docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs @@ -38,5 +40,6 @@ src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs src/Org.OpenAPITools/Model/Apple.cs src/Org.OpenAPITools/Model/Banana.cs src/Org.OpenAPITools/Model/Fruit.cs +src/Org.OpenAPITools/Model/Orange.cs src/Org.OpenAPITools/Org.OpenAPITools.csproj src/Org.OpenAPITools/README.md diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net9/OneOf/api/openapi.yaml index 556bd8fae459..6b5b3ec6e8cf 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/api/openapi.yaml @@ -22,6 +22,7 @@ components: oneOf: - $ref: "#/components/schemas/apple" - $ref: "#/components/schemas/banana" + - $ref: "#/components/schemas/orange" properties: color: type: string @@ -38,4 +39,10 @@ components: type: number title: banana type: object + orange: + properties: + sweet: + type: boolean + title: orange + type: object diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/docs/models/Orange.md b/samples/client/petstore/csharp/generichost/net9/OneOf/docs/models/Orange.md new file mode 100644 index 000000000000..cac616b565dc --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/docs/models/Orange.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Orange + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Sweet** | **bool** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs new file mode 100644 index 000000000000..6471b6cfba37 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools.Test/Model/OrangeTests.cs @@ -0,0 +1,65 @@ +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing Orange + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class OrangeTests : IDisposable + { + // TODO uncomment below to declare an instance variable for Orange + //private Orange instance; + + public OrangeTests() + { + // TODO uncomment below to create an instance of Orange + //instance = new Orange(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of Orange + /// + [Fact] + public void OrangeInstanceTest() + { + // TODO uncomment below to test "IsType" Orange + //Assert.IsType(instance); + } + + /// + /// Test the property 'Sweet' + /// + [Fact] + public void SweetTest() + { + // TODO unit test for the property 'Sweet' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs index 2e37448fb7d8..9e79cf0877cf 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -46,6 +46,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new AppleJsonConverter()); _jsonOptions.Converters.Add(new BananaJsonConverter()); _jsonOptions.Converters.Add(new FruitJsonConverter()); + _jsonOptions.Converters.Add(new OrangeJsonConverter()); JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new(_jsonOptions); _services.AddSingleton(jsonSerializerOptionsProvider); _services.AddSingleton(); diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index d58b2b4db1dd..056f2c03af8d 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -55,6 +55,18 @@ public Fruit(Banana banana, Option color = default) OnCreated(); } + /// + /// Initializes a new instance of the class. + /// + /// + /// color + public Fruit(Orange orange, Option color = default) + { + Orange = orange; + ColorOption = color; + OnCreated(); + } + partial void OnCreated(); /// @@ -67,6 +79,11 @@ public Fruit(Banana banana, Option color = default) /// public Banana? Banana { get; set; } + /// + /// Gets or Sets Orange + /// + public Orange? Orange { get; set; } + /// /// Used to track the state of Color /// @@ -137,6 +154,7 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Apple? apple = default; Banana? banana = default; + Orange? orange = default; Utf8JsonReader utf8JsonReaderOneOf = utf8JsonReader; while (utf8JsonReaderOneOf.Read()) @@ -154,6 +172,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert Utf8JsonReader utf8JsonReaderBanana = utf8JsonReader; ClientUtils.TryDeserialize(ref utf8JsonReaderBanana, jsonSerializerOptions, out banana); + + Utf8JsonReader utf8JsonReaderOrange = utf8JsonReader; + ClientUtils.TryDeserialize(ref utf8JsonReaderOrange, jsonSerializerOptions, out orange); } } @@ -190,6 +211,9 @@ public override Fruit Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert if (banana != null) return new Fruit(banana, color); + if (orange != null) + return new Fruit(orange, color); + throw new JsonException(); } diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Orange.cs b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Orange.cs new file mode 100644 index 000000000000..eaa0165ba6c1 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Orange.cs @@ -0,0 +1,173 @@ +// +/* + * fruity + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// Orange + /// + public partial class Orange : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// sweet + [JsonConstructor] + public Orange(Option sweet = default) + { + SweetOption = sweet; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of Sweet + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option SweetOption { get; private set; } + + /// + /// Gets or Sets Sweet + /// + [JsonPropertyName("sweet")] + public bool? Sweet { get { return this.SweetOption; } set { this.SweetOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class Orange {\n"); + sb.Append(" Sweet: ").Append(Sweet).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class OrangeJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override Orange Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option sweet = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "sweet": + sweet = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (bool?)null : utf8JsonReader.GetBoolean()); + break; + default: + break; + } + } + } + + if (sweet.IsSet && sweet.Value == null) + throw new ArgumentNullException(nameof(sweet), "Property is not nullable for class Orange."); + + return new Orange(sweet); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, orange, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, Orange orange, JsonSerializerOptions jsonSerializerOptions) + { + if (orange.SweetOption.IsSet) + writer.WriteBoolean("sweet", orange.SweetOption.Value!.Value); + } + } +} diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/Shape.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/Shape.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/Shape.md b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/Shape.md b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/Shape.md b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/Shape.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/Shape.md b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/Shape.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/Shape.md b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/Shape.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/NullableShape.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/NullableShape.md index f8fb004da806..2656339e9d36 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/NullableShape.md +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/NullableShape.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/Shape.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/Shape.md index 9a54628cd411..ced6864c4438 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/Shape.md +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/Shape.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/ShapeOrNull.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/ShapeOrNull.md index cbf61ebe77a6..ba986aa32e5c 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/ShapeOrNull.md @@ -6,6 +6,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **ShapeType** | **string** | | +**TriangleType** | **string** | | **QuadrilateralType** | **string** | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/java/okhttp-gson/docs/NullableShape.md b/samples/client/petstore/java/okhttp-gson/docs/NullableShape.md index c7000dc912de..9d40680fd2c2 100644 --- a/samples/client/petstore/java/okhttp-gson/docs/NullableShape.md +++ b/samples/client/petstore/java/okhttp-gson/docs/NullableShape.md @@ -9,6 +9,7 @@ The value may be a shape or the 'null' value. The 'nullable' attribute was intro | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**shapeType** | **String** | | | +|**triangleType** | **String** | | | |**quadrilateralType** | **String** | | | diff --git a/samples/client/petstore/java/okhttp-gson/docs/Shape.md b/samples/client/petstore/java/okhttp-gson/docs/Shape.md index 0b0c93502f86..51549d7b67f9 100644 --- a/samples/client/petstore/java/okhttp-gson/docs/Shape.md +++ b/samples/client/petstore/java/okhttp-gson/docs/Shape.md @@ -8,6 +8,7 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**shapeType** | **String** | | | +|**triangleType** | **String** | | | |**quadrilateralType** | **String** | | | diff --git a/samples/client/petstore/java/okhttp-gson/docs/ShapeOrNull.md b/samples/client/petstore/java/okhttp-gson/docs/ShapeOrNull.md index 1c084f8e3732..c4ae8f1b6720 100644 --- a/samples/client/petstore/java/okhttp-gson/docs/ShapeOrNull.md +++ b/samples/client/petstore/java/okhttp-gson/docs/ShapeOrNull.md @@ -9,6 +9,7 @@ The value may be a shape or the 'null' value. This is introduced in OAS schema > | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**shapeType** | **String** | | | +|**triangleType** | **String** | | | |**quadrilateralType** | **String** | | | diff --git a/samples/client/petstore/perl/lib/WWW/OpenAPIClient/Object/Adult.pm b/samples/client/petstore/perl/lib/WWW/OpenAPIClient/Object/Adult.pm index fea05beae617..3ae8ef7eefa5 100644 --- a/samples/client/petstore/perl/lib/WWW/OpenAPIClient/Object/Adult.pm +++ b/samples/client/petstore/perl/lib/WWW/OpenAPIClient/Object/Adult.pm @@ -34,7 +34,7 @@ use WWW::OpenAPIClient::Object::Child; use WWW::OpenAPIClient::Object::Human; use WWW::OpenAPIClient::Object::Person; -use base ("Class::Accessor", "Class::Data::Inheritable", "WWW::OpenAPIClient::Object::Person", "WWW::OpenAPIClient::Object::Human"); +use base ("Class::Accessor", "Class::Data::Inheritable"); # #A representation of an adult @@ -87,12 +87,6 @@ sub init my $args_key = $self->attribute_map->{$attribute}; $self->$attribute( $args{ $args_key } ); } - - # initialize parent object Person - $self->WWW::OpenAPIClient::Object::Person::init(%args); - - # initialize parent object Human - $self->WWW::OpenAPIClient::Object::Human::init(%args); } # return perl hash @@ -100,12 +94,6 @@ sub to_hash { my $self = shift; my $_hash = decode_json(JSON->new->convert_blessed->encode($self)); - # call Person to_hash and then combine hash - $_hash = { %$_hash, %$self->WWW::OpenAPIClient::Object::Person::to_hash }; - - # call Human to_hash and then combine hash - $_hash = { %$_hash, %$self->WWW::OpenAPIClient::Object::Human::to_hash }; - return $_hash; } @@ -136,12 +124,6 @@ sub TO_JSON { } } - # combine parent (Person) TO_JSON - $_data = { %$_data, %$self->WWW::OpenAPIClient::Object::Person::TO_JSON }; - - # combine parent (Human) TO_JSON - $_data = { %$_data, %$self->WWW::OpenAPIClient::Object::Human::TO_JSON }; - return $_data; } @@ -209,12 +191,6 @@ sub from_hash { } } - # call parent (Person) from_hash - $self->WWW::OpenAPIClient::Object::Person::from_hash($hash); - - # call parent (Human) from_hash - $self->WWW::OpenAPIClient::Object::Human::from_hash($hash); - return $self; } diff --git a/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES b/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES index 3f41c7441614..2b00993de376 100644 --- a/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES +++ b/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES @@ -15,6 +15,7 @@ PetstoreClient/Classes/OpenAPIs/Models.swift PetstoreClient/Classes/OpenAPIs/Models/Apple.swift PetstoreClient/Classes/OpenAPIs/Models/Banana.swift PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift +PetstoreClient/Classes/OpenAPIs/Models/Orange.swift PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -24,5 +25,6 @@ docs/Apple.md docs/Banana.md docs/DefaultAPI.md docs/Fruit.md +docs/Orange.md git_push.sh project.yml diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift index 76f10ba92e7a..0a7c58c949d8 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift @@ -13,6 +13,7 @@ import AnyCodable public enum Fruit: Codable, JSONEncodable, Hashable { case typeApple(Apple) case typeBanana(Banana) + case typeOrange(Orange) public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() @@ -21,6 +22,8 @@ public enum Fruit: Codable, JSONEncodable, Hashable { try container.encode(value) case .typeBanana(let value): try container.encode(value) + case .typeOrange(let value): + try container.encode(value) } } @@ -30,6 +33,8 @@ public enum Fruit: Codable, JSONEncodable, Hashable { self = .typeApple(value) } else if let value = try? container.decode(Banana.self) { self = .typeBanana(value) + } else if let value = try? container.decode(Orange.self) { + self = .typeOrange(value) } else { throw DecodingError.typeMismatch(Self.Type.self, .init(codingPath: decoder.codingPath, debugDescription: "Unable to decode instance of Fruit")) } diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift new file mode 100644 index 000000000000..d1d87f1d2853 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift @@ -0,0 +1,32 @@ +// +// Orange.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if canImport(AnyCodable) +import AnyCodable +#endif + +public struct Orange: Codable, JSONEncodable, Hashable { + + public var sweet: Bool? + + public init(sweet: Bool? = nil) { + self.sweet = sweet + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case sweet + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sweet, forKey: .sweet) + } +} + diff --git a/samples/client/petstore/swift5/oneOf/README.md b/samples/client/petstore/swift5/oneOf/README.md index c7f2a1d07df1..8f7377cc31d0 100644 --- a/samples/client/petstore/swift5/oneOf/README.md +++ b/samples/client/petstore/swift5/oneOf/README.md @@ -34,6 +34,7 @@ Class | Method | HTTP request | Description - [Apple](docs/Apple.md) - [Banana](docs/Banana.md) - [Fruit](docs/Fruit.md) + - [Orange](docs/Orange.md) diff --git a/samples/client/petstore/swift5/oneOf/docs/Fruit.md b/samples/client/petstore/swift5/oneOf/docs/Fruit.md index 3efd863258b7..bcdf4df4bb16 100644 --- a/samples/client/petstore/swift5/oneOf/docs/Fruit.md +++ b/samples/client/petstore/swift5/oneOf/docs/Fruit.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes **color** | **String** | | [optional] **kind** | **String** | | [optional] **count** | **Double** | | [optional] +**sweet** | **Bool** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/oneOf/docs/Orange.md b/samples/client/petstore/swift5/oneOf/docs/Orange.md new file mode 100644 index 000000000000..f7428a6705e5 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/docs/Orange.md @@ -0,0 +1,11 @@ +# Orange + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sweet** | **Bool** | | [optional] +**color** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift6/oneOf/.openapi-generator/FILES b/samples/client/petstore/swift6/oneOf/.openapi-generator/FILES index 0d9e2fcf9762..959ebf8f5dc2 100644 --- a/samples/client/petstore/swift6/oneOf/.openapi-generator/FILES +++ b/samples/client/petstore/swift6/oneOf/.openapi-generator/FILES @@ -19,10 +19,12 @@ PetstoreClient/Classes/OpenAPIs/Infrastructure/Validation.swift PetstoreClient/Classes/OpenAPIs/Models/Apple.swift PetstoreClient/Classes/OpenAPIs/Models/Banana.swift PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift +PetstoreClient/Classes/OpenAPIs/Models/Orange.swift README.md docs/Apple.md docs/Banana.md docs/DefaultAPI.md docs/Fruit.md +docs/Orange.md git_push.sh project.yml diff --git a/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift b/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift index ab4723c3a069..7d60ea96189a 100644 --- a/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift +++ b/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift @@ -10,6 +10,7 @@ import Foundation public enum Fruit: Sendable, Codable, ParameterConvertible, Hashable { case typeApple(Apple) case typeBanana(Banana) + case typeOrange(Orange) public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() @@ -18,6 +19,8 @@ public enum Fruit: Sendable, Codable, ParameterConvertible, Hashable { try container.encode(value) case .typeBanana(let value): try container.encode(value) + case .typeOrange(let value): + try container.encode(value) } } @@ -27,6 +30,8 @@ public enum Fruit: Sendable, Codable, ParameterConvertible, Hashable { self = .typeApple(value) } else if let value = try? container.decode(Banana.self) { self = .typeBanana(value) + } else if let value = try? container.decode(Orange.self) { + self = .typeOrange(value) } else { throw DecodingError.typeMismatch(Self.Type.self, .init(codingPath: decoder.codingPath, debugDescription: "Unable to decode instance of Fruit")) } diff --git a/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift b/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift new file mode 100644 index 000000000000..cf463c7e6f81 --- /dev/null +++ b/samples/client/petstore/swift6/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Orange.swift @@ -0,0 +1,29 @@ +// +// Orange.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Orange: Sendable, Codable, ParameterConvertible, Hashable { + + public var sweet: Bool? + + public init(sweet: Bool? = nil) { + self.sweet = sweet + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case sweet + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sweet, forKey: .sweet) + } +} + diff --git a/samples/client/petstore/swift6/oneOf/README.md b/samples/client/petstore/swift6/oneOf/README.md index 8bbf0e0bd05c..60b7a1fda684 100644 --- a/samples/client/petstore/swift6/oneOf/README.md +++ b/samples/client/petstore/swift6/oneOf/README.md @@ -34,6 +34,7 @@ Class | Method | HTTP request | Description - [Apple](docs/Apple.md) - [Banana](docs/Banana.md) - [Fruit](docs/Fruit.md) + - [Orange](docs/Orange.md) diff --git a/samples/client/petstore/swift6/oneOf/docs/Fruit.md b/samples/client/petstore/swift6/oneOf/docs/Fruit.md index 3efd863258b7..bcdf4df4bb16 100644 --- a/samples/client/petstore/swift6/oneOf/docs/Fruit.md +++ b/samples/client/petstore/swift6/oneOf/docs/Fruit.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes **color** | **String** | | [optional] **kind** | **String** | | [optional] **count** | **Double** | | [optional] +**sweet** | **Bool** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift6/oneOf/docs/Orange.md b/samples/client/petstore/swift6/oneOf/docs/Orange.md new file mode 100644 index 000000000000..f7428a6705e5 --- /dev/null +++ b/samples/client/petstore/swift6/oneOf/docs/Orange.md @@ -0,0 +1,11 @@ +# Orange + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sweet** | **Bool** | | [optional] +**color** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/NullableShape.md b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/NullableShape.md index 788bd0156211..80f70ecefa53 100644 --- a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/NullableShape.md +++ b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/NullableShape.md @@ -7,6 +7,7 @@ The value may be a shape or the \'null\' value. The \'nullable\' attribute was i Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **shapeType** | **string** | | [default to undefined] +**triangleType** | **string** | | [default to undefined] **quadrilateralType** | **string** | | [default to undefined] ## Example @@ -16,6 +17,7 @@ import { NullableShape } from './api'; const instance: NullableShape = { shapeType, + triangleType, quadrilateralType, }; ``` diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/Shape.md b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/Shape.md index 57b7b9db263f..e135140f28cd 100644 --- a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/Shape.md +++ b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/Shape.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **shapeType** | **string** | | [default to undefined] +**triangleType** | **string** | | [default to undefined] **quadrilateralType** | **string** | | [default to undefined] ## Example @@ -15,6 +16,7 @@ import { Shape } from './api'; const instance: Shape = { shapeType, + triangleType, quadrilateralType, }; ``` diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/ShapeOrNull.md b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/ShapeOrNull.md index 548a6417bfbe..79f281d4a005 100644 --- a/samples/client/petstore/typescript-axios/builds/test-petstore/docs/ShapeOrNull.md +++ b/samples/client/petstore/typescript-axios/builds/test-petstore/docs/ShapeOrNull.md @@ -7,6 +7,7 @@ The value may be a shape or the \'null\' value. This is introduced in OAS schema Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **shapeType** | **string** | | [default to undefined] +**triangleType** | **string** | | [default to undefined] **quadrilateralType** | **string** | | [default to undefined] ## Example @@ -16,6 +17,7 @@ import { ShapeOrNull } from './api'; const instance: ShapeOrNull = { shapeType, + triangleType, quadrilateralType, }; ``` diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES b/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES index f1ab7b5540a3..29ba2a3a5b0d 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES @@ -5,6 +5,7 @@ doc/Apple.md doc/Banana.md doc/DefaultApi.md doc/Fruit.md +doc/Orange.md lib/openapi.dart lib/src/api.dart lib/src/api/default_api.dart @@ -19,5 +20,7 @@ lib/src/model/apple.dart lib/src/model/banana.dart lib/src/model/date.dart lib/src/model/fruit.dart +lib/src/model/orange.dart lib/src/serializers.dart pubspec.yaml +test/orange_test.dart diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/README.md b/samples/openapi3/client/petstore/dart-dio/oneof/README.md index 16c114568e6a..174189febe2a 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/README.md +++ b/samples/openapi3/client/petstore/dart-dio/oneof/README.md @@ -72,6 +72,7 @@ Class | Method | HTTP request | Description - [Apple](doc/Apple.md) - [Banana](doc/Banana.md) - [Fruit](doc/Fruit.md) + - [Orange](doc/Orange.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/doc/Fruit.md b/samples/openapi3/client/petstore/dart-dio/oneof/doc/Fruit.md index 5d48cc6e6d38..5239c1160576 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/doc/Fruit.md +++ b/samples/openapi3/client/petstore/dart-dio/oneof/doc/Fruit.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **color** | **String** | | [optional] **kind** | **String** | | [optional] **count** | **num** | | [optional] +**sweet** | **bool** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/doc/Orange.md b/samples/openapi3/client/petstore/dart-dio/oneof/doc/Orange.md new file mode 100644 index 000000000000..a07836f00534 --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio/oneof/doc/Orange.md @@ -0,0 +1,15 @@ +# openapi.model.Orange + +## Load the model package +```dart +import 'package:openapi/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sweet** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/lib/openapi.dart b/samples/openapi3/client/petstore/dart-dio/oneof/lib/openapi.dart index bdddadb4c579..89fcd8228d97 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/lib/openapi.dart +++ b/samples/openapi3/client/petstore/dart-dio/oneof/lib/openapi.dart @@ -15,4 +15,5 @@ export 'package:openapi/src/api/default_api.dart'; export 'package:openapi/src/model/apple.dart'; export 'package:openapi/src/model/banana.dart'; export 'package:openapi/src/model/fruit.dart'; +export 'package:openapi/src/model/orange.dart'; diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/fruit.dart b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/fruit.dart index 11f8cfa70501..9f969087268e 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/fruit.dart +++ b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/fruit.dart @@ -5,6 +5,7 @@ // ignore_for_file: unused_element import 'package:openapi/src/model/apple.dart'; import 'package:openapi/src/model/banana.dart'; +import 'package:openapi/src/model/orange.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:one_of/one_of.dart'; @@ -17,12 +18,13 @@ part 'fruit.g.dart'; /// * [color] /// * [kind] /// * [count] +/// * [sweet] @BuiltValue() abstract class Fruit implements Built { @BuiltValueField(wireName: r'color') String? get color; - /// One Of [Apple], [Banana] + /// One Of [Apple], [Banana], [Orange] OneOf get oneOf; Fruit._(); @@ -104,7 +106,7 @@ class _$FruitSerializer implements PrimitiveSerializer { }) { final result = FruitBuilder(); Object? oneOfDataSrc; - final targetType = const FullType(OneOf, [FullType(Apple), FullType(Banana), ]); + final targetType = const FullType(OneOf, [FullType(Apple), FullType(Banana), FullType(Orange), ]); final serializedList = (serialized as Iterable).toList(); final unhandled = []; _deserializeProperties( diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/orange.dart b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/orange.dart new file mode 100644 index 000000000000..780c06144e3f --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/model/orange.dart @@ -0,0 +1,108 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// + +// ignore_for_file: unused_element +import 'package:built_value/built_value.dart'; +import 'package:built_value/serializer.dart'; + +part 'orange.g.dart'; + +/// Orange +/// +/// Properties: +/// * [sweet] +@BuiltValue() +abstract class Orange implements Built { + @BuiltValueField(wireName: r'sweet') + bool? get sweet; + + Orange._(); + + factory Orange([void updates(OrangeBuilder b)]) = _$Orange; + + @BuiltValueHook(initializeBuilder: true) + static void _defaults(OrangeBuilder b) => b; + + @BuiltValueSerializer(custom: true) + static Serializer get serializer => _$OrangeSerializer(); +} + +class _$OrangeSerializer implements PrimitiveSerializer { + @override + final Iterable types = const [Orange, _$Orange]; + + @override + final String wireName = r'Orange'; + + Iterable _serializeProperties( + Serializers serializers, + Orange object, { + FullType specifiedType = FullType.unspecified, + }) sync* { + if (object.sweet != null) { + yield r'sweet'; + yield serializers.serialize( + object.sweet, + specifiedType: const FullType(bool), + ); + } + } + + @override + Object serialize( + Serializers serializers, + Orange object, { + FullType specifiedType = FullType.unspecified, + }) { + return _serializeProperties(serializers, object, specifiedType: specifiedType).toList(); + } + + void _deserializeProperties( + Serializers serializers, + Object serialized, { + FullType specifiedType = FullType.unspecified, + required List serializedList, + required OrangeBuilder result, + required List unhandled, + }) { + for (var i = 0; i < serializedList.length; i += 2) { + final key = serializedList[i] as String; + final value = serializedList[i + 1]; + switch (key) { + case r'sweet': + final valueDes = serializers.deserialize( + value, + specifiedType: const FullType(bool), + ) as bool; + result.sweet = valueDes; + break; + default: + unhandled.add(key); + unhandled.add(value); + break; + } + } + } + + @override + Orange deserialize( + Serializers serializers, + Object serialized, { + FullType specifiedType = FullType.unspecified, + }) { + final result = OrangeBuilder(); + final serializedList = (serialized as Iterable).toList(); + final unhandled = []; + _deserializeProperties( + serializers, + serialized, + specifiedType: specifiedType, + serializedList: serializedList, + unhandled: unhandled, + result: result, + ); + return result.build(); + } +} + diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/serializers.dart b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/serializers.dart index 9c32c391086a..d1a87b6d16fa 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/serializers.dart +++ b/samples/openapi3/client/petstore/dart-dio/oneof/lib/src/serializers.dart @@ -17,6 +17,7 @@ import 'package:openapi/src/model/date.dart'; import 'package:openapi/src/model/apple.dart'; import 'package:openapi/src/model/banana.dart'; import 'package:openapi/src/model/fruit.dart'; +import 'package:openapi/src/model/orange.dart'; part 'serializers.g.dart'; @@ -24,6 +25,7 @@ part 'serializers.g.dart'; Apple, Banana, Fruit, + Orange, ]) Serializers serializers = (_$serializers.toBuilder() ..add(const OneOfSerializer()) diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/test/orange_test.dart b/samples/openapi3/client/petstore/dart-dio/oneof/test/orange_test.dart new file mode 100644 index 000000000000..63968f7d7ef2 --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio/oneof/test/orange_test.dart @@ -0,0 +1,16 @@ +import 'package:test/test.dart'; +import 'package:openapi/openapi.dart'; + +// tests for Orange +void main() { + final instance = OrangeBuilder(); + // TODO add properties to the builder and call build() + + group(Orange, () { + // bool sweet + test('to test the property `sweet`', () async { + // TODO + }); + + }); +} From b52060492ea374d50754f3f4a7b7f23079568560 Mon Sep 17 00:00:00 2001 From: Florian Kellner Date: Mon, 1 Sep 2025 10:57:38 +0200 Subject: [PATCH 8/8] update samples again --- .../csharp/generichost/net4.7/OneOf/.openapi-generator/FILES | 1 - .../csharp/generichost/net4.8/OneOf/.openapi-generator/FILES | 1 - .../csharp/generichost/net8/OneOf/.openapi-generator/FILES | 1 - .../csharp/generichost/net9/OneOf/.openapi-generator/FILES | 1 - .../client/petstore/dart-dio/oneof/.openapi-generator/FILES | 1 - 5 files changed, 5 deletions(-) diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES index 3135e2dd60d1..47a388f55336 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/FILES @@ -11,7 +11,6 @@ docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs -src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES index 3135e2dd60d1..47a388f55336 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/FILES @@ -11,7 +11,6 @@ docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs -src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES index 3cc89cbec659..a36efde4422e 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/FILES @@ -11,7 +11,6 @@ docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs -src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES index 3cc89cbec659..a36efde4422e 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/FILES @@ -11,7 +11,6 @@ docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs -src/Org.OpenAPITools.Test/Model/OrangeTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs diff --git a/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES b/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES index 29ba2a3a5b0d..acff6581d64e 100644 --- a/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/dart-dio/oneof/.openapi-generator/FILES @@ -23,4 +23,3 @@ lib/src/model/fruit.dart lib/src/model/orange.dart lib/src/serializers.dart pubspec.yaml -test/orange_test.dart