Cat:
  description: A representation of a cat
  allOf:
    - $ref: '#/Pet'
    - type: object
      properties:
        huntingSkill:
          type: string
          description: The measured skill for hunting
          default: lazy
          enum:
            - clueless
            - lazy
            - adventurous
            - aggressive
      required:
        - huntingSkill
Dog:
  description: A representation of a dog
  allOf:
    - $ref: '#/Pet'
    - type: object
      properties:
        packSize:
          type: integer
          format: int32
          description: the size of the pack the dog is from
          default: 0
          minimum: 0
      required:
        - packSize
Error:
  type: object
  required:
    - code
    - message
  properties:
    code:
      type: integer
      format: int32
    message:
      type: string
Pet:
  type: object
  properties:
    id:
      type: integer
      format: int64
    name:
      type: string
    tag:
      type: string
    type:
      type: string
  discriminator:
    propertyName: type
    mapping:
      cat: '#/Cat'
      dog: '#/Dog'
  required:
    - id
    - name
    - type
Pets:
  type: array
  items:
    $ref: '#/Pet'
