Autorest only support defining polymorphic types using allOf
(oneOf
is not supported)
Basic example with type
being the discriminator. By default the discriminator value will be the schema name(Cat
and Dog
here).
OpenAPI 3
components:
schemas:
Pet:
type: object
discriminator:
propertyName: type
Cat:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
moew:
type: boolean
Dog:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
bark:
type: boolean
Swagger 2
definitions:
Pet:
type: object
discriminator: type
Cat:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
moew:
type: boolean
Dog:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
bark:
type: boolean
If the discriminator values are not the object names you can change it using
discriminator.mapping
property in OpenAPI 3x-ms-discriminator-value
extension property in Swagger 2.0Here changing to catType
and dogType
OpenAPI 3
components:
schemas:
Pet:
type: object
discriminator:
propertyName: type
mapping:
catType: "#/components/schemas/Cat"
dogType: "#/components/schemas/Dog"
Cat:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
moew:
type: boolean
Dog:
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
bark:
type: boolean
Swagger 2
components:
schemas:
Pet:
type: object
discriminator: type
Cat:
x-ms-discriminator-value: catType
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
moew:
type: boolean
Dog:
x-ms-discriminator-value: dogType
type: object
allOf:
- $ref: "#/components/schemas/Pet"
- properties:
bark:
type: boolean