Skip to content

Commit 91a1931

Browse files
authored
[csharp][generichost] Add support for primitive composed (#18825)
* add support for primitive composed * build samples again * rebuild tests * addressed comment
1 parent ed2aad6 commit 91a1931

File tree

289 files changed

+24035
-145
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

289 files changed

+24035
-145
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
603603
property.name = patchPropertyName(model, camelize(property.baseType));
604604
property.isNullable = true;
605605
patchPropertyVendorExtensions(property);
606+
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
606607
}
607608
}
608609

@@ -613,6 +614,7 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
613614
property.name = patchPropertyName(model, camelize(property.baseType));
614615
property.isNullable = true;
615616
patchPropertyVendorExtensions(property);
617+
property.vendorExtensions.put("x-base-name", model.name.substring(model.name.lastIndexOf('_') + 1));
616618
}
617619
}
618620
}

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,10 +360,24 @@
360360
{{#model.hasDiscriminatorWithNonEmptyMapping}}
361361
{{#composedSchemas.oneOf}}
362362
{{^vendorExtensions.x-duplicated-data-type}}
363-
if ({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}} != null) {
363+
if ({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}} != null)
364+
{{#isPrimitiveType}}
365+
{{#isString}}
366+
writer.WriteString("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value);
367+
{{/isString}}
368+
{{#isBoolean}}
369+
writer.WriteBoolean("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value.Value);
370+
{{/isBoolean}}
371+
{{#isNumeric}}
372+
writer.WriteNumber("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value.Value);
373+
{{/isNumeric}}
374+
{{/isPrimitiveType}}
375+
{{^isPrimitiveType}}
376+
{
364377
{{baseType}}JsonConverter {{#lambda.camelcase_sanitize_param}}{{baseType}}JsonConverter{{/lambda.camelcase_sanitize_param}} = ({{baseType}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}.GetType()));
365378
{{#lambda.camelcase_sanitize_param}}{{baseType}}JsonConverter{{/lambda.camelcase_sanitize_param}}.WriteProperties(writer, {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}, jsonSerializerOptions);
366379
}
380+
{{/isPrimitiveType}}
367381

368382
{{/vendorExtensions.x-duplicated-data-type}}
369383
{{/composedSchemas.oneOf}}
@@ -373,10 +387,23 @@
373387
{{#composedSchemas}}
374388
{{#anyOf}}
375389
if ({{#lambda.joinWithAmpersand}}{{^required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.IsSet {{/required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}} != null{{/lambda.joinWithAmpersand}})
390+
{{#isPrimitiveType}}
391+
{{#isString}}
392+
writer.WriteString("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value);
393+
{{/isString}}
394+
{{#isBoolean}}
395+
writer.WriteBoolean("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value.Value);
396+
{{/isBoolean}}
397+
{{#isNumeric}}
398+
writer.WriteNumber("{{vendorExtensions.x-base-name}}", {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.Value.Value);
399+
{{/isNumeric}}
400+
{{/isPrimitiveType}}
401+
{{^isPrimitiveType}}
376402
{
377403
{{datatypeWithEnum}}JsonConverter {{datatypeWithEnum}}JsonConverter = ({{datatypeWithEnum}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}}.GetType()));
378404
{{datatypeWithEnum}}JsonConverter.WriteProperties(writer, {{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}}, jsonSerializerOptions);
379405
}
406+
{{/isPrimitiveType}}
380407

381408
{{/anyOf}}
382409
{{/composedSchemas}}

modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,6 +1250,32 @@ paths:
12501250
application/json:
12511251
schema:
12521252
$ref: '#/components/schemas/ArrayOfEnums'
1253+
/fake/mixed/anyOf:
1254+
get:
1255+
tags:
1256+
- fake
1257+
summary: Test mixed type anyOf deserialization
1258+
operationId: getMixedAnyOf
1259+
responses:
1260+
200:
1261+
description: Got mixed anyOf
1262+
content:
1263+
application/json:
1264+
schema:
1265+
$ref: '#/components/schemas/MixedAnyOf'
1266+
/fake/mixed/oneOf:
1267+
get:
1268+
tags:
1269+
- fake
1270+
summary: Test mixed type oneOf deserialization
1271+
operationId: getMixedOneOf
1272+
responses:
1273+
200:
1274+
description: Got mixed oneOf
1275+
content:
1276+
application/json:
1277+
schema:
1278+
$ref: '#/components/schemas/MixedOneOf'
12531279
/country:
12541280
post:
12551281
operationId: getCountry
@@ -2753,6 +2779,41 @@ components:
27532779
type: array
27542780
items:
27552781
$ref: '#/components/schemas/Custom-Variableobject-Response'
2782+
MixedOneOf:
2783+
properties:
2784+
content:
2785+
oneOf:
2786+
- type: string
2787+
- type: boolean
2788+
# JsonReader will give back C# System.Int64 regardless of format.
2789+
- type: integer
2790+
format: uint8
2791+
# JsonReader will give back C# System.Double regardless of format.
2792+
- type: number
2793+
format: float32
2794+
- type: object
2795+
$ref: '#/components/schemas/MixedSubId'
2796+
description: Mixed oneOf types for testing
2797+
MixedAnyOf:
2798+
properties:
2799+
content:
2800+
anyOf:
2801+
- type: string
2802+
- type: boolean
2803+
# JsonReader will give back C# System.Int64 regardless of format.
2804+
- type: integer
2805+
format: uint8
2806+
# JsonReader will give back C# System.Double regardless of format.
2807+
- type: number
2808+
format: float32
2809+
- type: object
2810+
$ref: '#/components/schemas/MixedSubId'
2811+
2812+
description: Mixed anyOf types for testing
2813+
MixedSubId:
2814+
properties:
2815+
id:
2816+
type: string
27562817
# this class ensures that the CodegenProperties are sorted correctly
27572818
# https://github.com/OpenAPITools/openapi-generator/issues/18607
27582819
MixLog:

samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/FILES

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@ docs/models/Mammal.md
6363
docs/models/MapTest.md
6464
docs/models/MapTestMapOfEnumStringValue.md
6565
docs/models/MixLog.md
66+
docs/models/MixedAnyOf.md
67+
docs/models/MixedAnyOfContent.md
68+
docs/models/MixedOneOf.md
69+
docs/models/MixedOneOfContent.md
6670
docs/models/MixedPropertiesAndAdditionalPropertiesClass.md
71+
docs/models/MixedSubId.md
6772
docs/models/Model200Response.md
6873
docs/models/ModelClient.md
6974
docs/models/Name.md
@@ -215,7 +220,12 @@ src/Org.OpenAPITools/Model/Mammal.cs
215220
src/Org.OpenAPITools/Model/MapTest.cs
216221
src/Org.OpenAPITools/Model/MapTestMapOfEnumStringValue.cs
217222
src/Org.OpenAPITools/Model/MixLog.cs
223+
src/Org.OpenAPITools/Model/MixedAnyOf.cs
224+
src/Org.OpenAPITools/Model/MixedAnyOfContent.cs
225+
src/Org.OpenAPITools/Model/MixedOneOf.cs
226+
src/Org.OpenAPITools/Model/MixedOneOfContent.cs
218227
src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs
228+
src/Org.OpenAPITools/Model/MixedSubId.cs
219229
src/Org.OpenAPITools/Model/Model200Response.cs
220230
src/Org.OpenAPITools/Model/ModelClient.cs
221231
src/Org.OpenAPITools/Model/Name.cs

samples/client/petstore/csharp/generichost/net4.7/FormModels/api/openapi.yaml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,6 +1182,32 @@ paths:
11821182
summary: Array of Enums
11831183
tags:
11841184
- fake
1185+
/fake/mixed/anyOf:
1186+
get:
1187+
operationId: getMixedAnyOf
1188+
responses:
1189+
"200":
1190+
content:
1191+
application/json:
1192+
schema:
1193+
$ref: '#/components/schemas/MixedAnyOf'
1194+
description: Got mixed anyOf
1195+
summary: Test mixed type anyOf deserialization
1196+
tags:
1197+
- fake
1198+
/fake/mixed/oneOf:
1199+
get:
1200+
operationId: getMixedOneOf
1201+
responses:
1202+
"200":
1203+
content:
1204+
application/json:
1205+
schema:
1206+
$ref: '#/components/schemas/MixedOneOf'
1207+
description: Got mixed oneOf
1208+
summary: Test mixed type oneOf deserialization
1209+
tags:
1210+
- fake
11851211
/country:
11861212
post:
11871213
operationId: getCountry
@@ -2528,6 +2554,22 @@ components:
25282554
- a_objVariableobject
25292555
- pkiNotificationtestID
25302556
type: object
2557+
MixedOneOf:
2558+
example:
2559+
content: MixedOneOf_content
2560+
properties:
2561+
content:
2562+
$ref: '#/components/schemas/MixedOneOf_content'
2563+
MixedAnyOf:
2564+
example:
2565+
content: MixedAnyOf_content
2566+
properties:
2567+
content:
2568+
$ref: '#/components/schemas/MixedAnyOf_content'
2569+
MixedSubId:
2570+
properties:
2571+
id:
2572+
type: string
25312573
MixLog:
25322574
properties:
25332575
id:
@@ -2950,6 +2992,26 @@ components:
29502992
- unknown
29512993
- notUnknown
29522994
type: string
2995+
MixedOneOf_content:
2996+
description: Mixed oneOf types for testing
2997+
oneOf:
2998+
- type: string
2999+
- type: boolean
3000+
- format: uint8
3001+
type: integer
3002+
- format: float32
3003+
type: number
3004+
- $ref: '#/components/schemas/MixedSubId'
3005+
MixedAnyOf_content:
3006+
anyOf:
3007+
- type: string
3008+
- type: boolean
3009+
- format: uint8
3010+
type: integer
3011+
- format: float32
3012+
type: number
3013+
- $ref: '#/components/schemas/MixedSubId'
3014+
description: Mixed anyOf types for testing
29533015
securitySchemes:
29543016
petstore_auth:
29553017
flows:

0 commit comments

Comments
 (0)