How do you set a default discriminator for each child class?
For example, take this schema:
components:
schemas:
Pet:
type: object
required:
- petType
properties:
petType:
type: string
discriminator:
propertyName: petType
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
Code-generators for the above schema will create a client where the petType
value must be explicitly set by the programmer. Why can't the Cat
object have the petType
be set to Cat
by default?
I tried using default
value to get it to work. However, the resulting code includes shadowed properties (same property on the child and parent).
components:
schemas:
Pet:
type: object
required:
- petType
properties:
petType:
type: string
discriminator:
propertyName: petType
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
petType:
type: string
default: 'Cat'
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
petType:
type: string
default: 'Dog'
Removing the property petType
from the parent also doesn't feel right since technically it's more of a property of the parent than the child.
components:
schemas:
Pet:
type: object
required:
- petType
discriminator:
propertyName: petType
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
petType:
type: string
default: 'Cat'
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
petType:
type: string
default: 'Dog'
Do you have any solutions to this problem?