openapi-trait 0.0.8

Generate typed Rust traits from OpenAPI specifications using a proc-macro attribute
Documentation
# Exercises every OpenAPI constraint keyword that maps to a `serde_valid`
# `#[validate(...)]` attribute, plus a nested `$ref` field to confirm that a
# top-level `.validate()` recurses into referenced models.
openapi: 3.0.1
info:
  version: 1.0.0
  title: Validation Example
paths:
  /widgets/{widgetId}:
    get:
      operationId: getWidget
      parameters:
        - name: widgetId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Widget'
components:
  schemas:
    Widget:
      type: object
      required:
        - name
        - count
        - ratio
        - tags
        - inner
        - id
      properties:
        id:
          # $ref to a scalar alias (`type: WidgetId = String`). A bare
          # `#[validate]` here would try to call `.validate()` on a `String`
          # and fail to compile.
          $ref: '#/components/schemas/WidgetId'
        labels:
          # Optional $ref to a map alias (`Labels = HashMap<String, String>`),
          # reproducing the `Option<HashMap<String, String>>` compile error.
          $ref: '#/components/schemas/Labels'
        name:
          type: string
          minLength: 2
          maxLength: 10
          pattern: '^[a-z]+$'
        count:
          type: integer
          minimum: 1
          maximum: 100
          multipleOf: 5
        ratio:
          type: number
          minimum: 0
          exclusiveMaximum: true
          maximum: 1
        tags:
          type: array
          minItems: 1
          maxItems: 3
          uniqueItems: true
          items:
            type: string
        inner:
          $ref: '#/components/schemas/Inner'
    Inner:
      type: object
      required:
        - code
      properties:
        code:
          type: string
          minLength: 3
    # A scalar alias: lowers to `pub type WidgetId = String;`, which does not
    # derive `Validate`. A `$ref` to it must not emit a bare `#[validate]`.
    WidgetId:
      type: string
    # A map alias: lowers to `pub type Labels = HashMap<String, String>;`, which
    # also does not derive `Validate`.
    Labels:
      type: object
      additionalProperties:
        type: string