Skip to content

Configure to treat F# discriminated unions as enums #59

@object

Description

@object

If a response type includes a member of a disrciminated union, its Swagger interpretation looks strange. Example:

    type MediaSetStatus =
        | Pending
        | Completed
        | Rejected
        | Expired

    type MediaSetStatusInfo =
        {
            MediaSetId: string
            Status: MediaSetStatus
            ActivationTime: DateTime
            UpdateTime: DateTime
            RetryCount: int
            Priority: int
        }

    responseBodies = [| ResponseBody(statusCode = 200, contentTypes = [|"application/json"|], responseType = typeof<MediaSetStatusInfo array>) |]

Example:

[{
    "mediaSetId": "string",
    "status": {
      "tag": 0,
      "isPending": true,
      "isCompleted": true,
      "isRejected": true,
      "isExpired": true
    },
    "activationTime": "2025-06-24T10:04:38.241Z",
    "updateTime": "2025-06-24T10:04:38.241Z",
    "retryCount": 0,
    "priority": 0
}]

Is it possible to override discriminated union mapping so they can be mapped to OpenAPI enums? E.g. OpenApiSchema(Enum = [|OpenApiString("pending"); OpenApiString("rejected"); OpenApiString("completed"); OpenApiString("expired")|])

Metadata

Metadata

Assignees

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