# schema-discriminator-defined

Source: https://apigenie.pl/docs/linter/openapi/rules/schema-discriminator-defined

This rule ensures that whenever a schema object defines a `oneOf` clause, it
also defines a discriminator property.

## Rule Details

The `schema-discriminator-defined` rule is designed to ensure that all schema
objects that define a `oneOf` clause also define the `discriminator` property.
The `discriminator` property is used to aid in the deserialization of `oneOf`
schemas.

## Configuration

None.

## Examples

**Good**.

```yaml
components:
  schemas:
    Pet:
      type: object
      discriminator:
        propertyName: petType
      oneOf:
        - $ref: "#/components/schemas/Cat"
        - $ref: "#/components/schemas/Dog"
```

**Bad**. It is not obvious when a pet is a cat, and when it is a dog.

```yaml
components:
  schemas:
    Pet:
      type: object
      oneOf:
        - $ref: "#/components/schemas/Cat"
        - $ref: "#/components/schemas/Dog"
```

## When Not to Use It

We recommend to always enable this rule.

## Automatic fixes

When invoked with `--fix`, this rule adds `discriminator.propertyName` only when
every `oneOf` alternative exposes one shared property with distinct `const`
values. All other discriminator choices remain manual.

## Compatibility

This rule is compatible with all OpenAPI 3.x versions.
