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