# schema-enum-naming

Source: https://apigenie.pl/docs/linter/asyncapi/rules/schema-enum-naming

This rule ensures that all string values defined in the `enum` properties of
schema objects adhere to a predefined naming convention.

## Rule Details

Adhering to a consistent naming convention enhances the readability and
maintainability of the API's structure.

The `schema-enum-naming` rule checks the string values of the `enum` list of
every schema of an AsyncAPI document. For every value that is not in the
expected convention, it reports
`Schema enum value '<value>' is not in the '<convention>' convention`.
Values of other types (numbers, booleans, `null`, ...) are ignored.

The recognised naming conventions are:

- `const` - THIS_IS_CONST_CASE
- `camel` - thisIsCamelCase, also with acronyms (userID)
- `camel-strict` - thisIsCamelCase, but no two capitals in a row (userId, not userID)
- `kebab` - this-is-kebab-case
- `pascal` - ThisIsPascalCase, also with acronyms (HTTPServer)
- `pascal-strict` - ThisIsPascalCase, but no two capitals in a row (HttpServer, not HTTPServer)
- `header` - This-Is-Header-Case
- `snake` - this_is_snake_case

The default convention is `const`.

## Configuration

The configuration block is a naming convention name (see the "Rule Details"
section for a list of recognized names).

```yaml
version: "1.0"
commands:
  lint:
    asyncapi:
      rules:
        schema-enum-naming: [warning, kebab]
```

## Examples

**Good**. With the default configuration.

```yaml
asyncapi: 3.0.0
info:
  title: User Events
  version: 1.0.0
components:
  schemas:
    UserStatus:
      type: string
      enum:
        - ACTIVE
        - INACTIVE
        - BLOCKED
```

**Bad**. To use `UserStatus` properly, a consumer must always consult the
documentation.

```yaml
asyncapi: 3.0.0
info:
  title: User Events
  version: 1.0.0
components:
  schemas:
    UserStatus:
      type: string
      enum:
        - activeStatus
        - inactive_status
        - BLOCKED_STATUS
```

## When Not to Use It

If your API does not follow a specific naming convention for `enum` values
in its schema objects, you may not need to use this rule.

## Compatibility

This rule is compatible with AsyncAPI 3.x documents. AsyncAPI 2.x documents
are rejected by the reader and are not linted.
