swagger-api / swagger-api/swagger-codegen
Generated type with OneOf should use base model
Nobody has claimed this yet.
- Dominant language
- Mustache
- Stars
- 17.8k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
Description
I'm trying to generate a code for models with OneOf. It generates code, but it's unusable without changes. If I specify a type, that inside it has OneOf, so it generates this type, but it's empty. If I specify a property, that consists of OneOf, it generates models starting OneOfModelName, but not sure how to use it. I've search the Internet for answers, but haven't found yet.
Ideal situation is, that OneOf should end up with Base implementation for types and several types, that will be inherit this base model, e.g.:
BaseTestItemWithDiscriminator is a base model
ImplementationFirstWithDiscriminator inherits BaseTestItemWithDiscriminator
ImplementationSecondWithDiscriminator inherits BaseTestItemWithDiscriminator
And property in code should look like
public BaseTestItemWithDiscriminator TestItem { get; set; }
Not:
public FinalOverrideModel TestItem { get; set; } or
public OneOfModelToReturnTestItemWithDiscriminator TestItemWithDiscriminator { get; set; }
Is it an issue, or I have something wrong in the schema?
Swagger-codegen version
3.0.21
Swagger declaration file content or url
x-generator: NSwag v13.0.6.0 (NJsonSchema v10.0.23.0 (Newtonsoft.Json v11.0.0.0))
openapi: 3.0.0
info:
title: APIs
version: 1.0.0
paths:
/api/testmodel:
get:
summary: Returns test model.
responses:
'200':
description: TestModel
content:
application/json:
schema:
$ref: '#/components/schemas/ModelToReturn'
security:
- Basic: []
components:
schemas:
ModelToReturn:
type: object
additionalProperties: false
properties:
testItem:
$ref: '#/components/schemas/FinalOverrideModel'
testItemWithDiscriminator:
oneOf:
- $ref: '#/components/schemas/ImplementationFirstWithDiscriminator'
- $ref: '#/components/schemas/ImplementationSecondWithDiscriminator'
discriminator:
propertyName: itemType
mapping:
highQ: '#/components/schemas/ImplementationFirstWithDiscriminator'
iManage: '#/components/schemas/ImplementationSecondWithDiscriminator'
BaseTestItemWithDiscriminator:
type: object
required:
- itemType
properties:
itemType:
type: string
nullable: true
enum:
- type1
- type2
discriminator:
propertyName: itemType
mapping:
type1: '#/components/schemas/ImplementationFirstWithDiscriminator'
type2: '#/components/schemas/ImplementationSecondWithDiscriminator'
ImplementationFirstWithDiscriminator:
type: object
allOf:
- $ref: '#/components/schemas/BaseTestItemWithDiscriminator'
- type: object
properties:
name:
type: string
nullable: true
ImplementationSecondWithDiscriminator:
type: object
allOf:
- $ref: '#/components/schemas/BaseTestItemWithDiscriminator'
- type: object
properties:
title:
type: string
nullable: true
FinalOverrideModel:
oneOf:
- $ref: '#/components/schemas/ImplementationFirstWithDiscriminator'
- $ref: '#/components/schemas/ImplementationSecondWithDiscriminator'
discriminator:
propertyName: itemType
mapping:
highQ: '#/components/schemas/ImplementationFirstWithDiscriminator'
iManage: '#/components/schemas/ImplementationSecondWithDiscriminator'
securitySchemes:
Basic:
type: http
scheme: basic
Command line used for generation
java -jar swagger-codegen-cli-3.0.21.jar generate -i openapi_b.json -l csharp -o f:\csharp
Steps to reproduce
Just use code generation on the model provided
Related issues/PRs
None found
Suggest a fix/enhancement
No suggestions
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the Java CLI command with the supplied OpenAPI YAML and inspect the C# generator's handling of oneOf, allOf, and discriminators. Compare the generated properties for FinalOverrideModel and testItemWithDiscriminator with the requested BaseTestItemWithDiscriminator type and derived implementations; done means the generated model exposes the base type while retaining the concrete implementations.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, java, openapi
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100