Skip to content

Open API 3 Specs Generation #5

@dacloutier

Description

@dacloutier

This is probably more of a limitation with the Open Api spec generation, but I'm curious as to why this is happening.

I'm building a proof of concept using the Open Api Schema annotations to generate the Open Api Spec document. And I get a spec document that doesn't seem to be usable to figure out the deserialization.

There doesn't seem to be a link between the CodifiedEnum and the Known Unknown objects.

Here's a code snippet of the Response class:

@ApiModel(
    description = "An order from a customer"
)
data class Order(
//...
    @Schema(
        name = "status",
        example = "DRAFT",
        description = "The status of the order",
        required = true
    )
    @Serializable(with = OrderStatus.CodifiedSerializer::class)
    val status: CodifiedEnum<OrderStatus, String>,
// ...
}

Here's a code snippet of the OrderStatus enum:

@ApiModel(
    description = "All order statuses"
)
enum class OrderStatus(override val code: String) : Codified<String> {
    DRAFT("DRAFT"), PROCESSED("PROCESSED"), CANCELLED("CANCELLED");

    object CodifiedSerializer : KSerializer<CodifiedEnum<OrderStatus, String>> by codifiedEnumSerializer()
}

The generated open api spec:

    Order:
      required:
      - id
      - status
      type: object
      properties:
        id:
          type: string
          description: The order identifier
          example: 2c93808457d787030157e02e7be22210
        status:
          $ref: '#/components/schemas/CodifiedEnumOrderStatusString'
    CodifiedEnumOrderStatusString:
      type: object
      description: The status of the order
      example: DRAFT
      allOf:
      - $ref: '#/components/schemas/CodifiedEnum'
    CodifiedEnum:
      type: object
    Known:
      required:
      - value
      type: object
      allOf:
      - $ref: '#/components/schemas/CodifiedEnumOrderStatusString'
      - type: object
        properties:
          value:
            type: string
      - $ref: '#/components/schemas/CodifiedEnum'
    Unknown:
      required:
      - value
      type: object
      allOf:
      - $ref: '#/components/schemas/CodifiedEnumOrderStatusString'
      - type: object
        properties:
          value:
            type: object
      - $ref: '#/components/schemas/CodifiedEnum'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions