Customize Enums
Default Behavior
To ensure that your SDK generated by Speakeasy is compilable, there should be no naming conflicts in your spec.
Enums can be tricky because they are often defined inline and not as a schema definition.
Here's how Speakeasy handles enums: If an enum is defined as a schema, the schema name is used to represent the enum. If an enum is defined inline, the name will be constructed from the position of the enum in the document.
Here's an example showing the default behavior for both inline and schema-based enums.
Inline Enum:
paths:
/user/:
post:
operationId: createUser
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
description: The user's email address
status:
type: string
description: The user's status
enum:
- basic
- premium
country:
$ref: "#/components/schemas/Country"
responses:
"200":
description: OK
components:
schemas:
Country:
type: string
description: The user's country
enum:
- US
- UK
user = {
email: "test@speakeasyapi.dev",
status: CreateUserRequestBodyStatusEnum.Basic
country: CountryEnum.UK
}
Rename Inline Enums
For enums defined inline, Speakeasy supports $anchor
keywords (opens in a new tab), which you can use to rename enums:
Inline Enum with Anchor:
paths:
/user/:
post:
operationId: createUser
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
description: The user's email address
status:
$anchor: Status
type: string
description: The user's role
enum:
- basic
- premium
country:
$ref: "#/components/schemas/Country"
responses:
"200":
description: OK
components:
schemas:
Country:
type: string
description: The user's country
enum:
- US
- UK
user = {
email: "test@speakeasyapi.dev",
status: StatusEnum.Basic
country: CountryEnum.UK
}
Enum Member Names
By default, Speakeasy will convert the enum value to a suitable name (namespaced by the enum type name if necessary to avoid naming collisions) for the enum member in the generated code. For example an integer value of 6
will be converted to SIX
, or my-enum-value
will be converted to MY_ENUM_VALUE
(or the equivalent in the target language).
To have more control over the generated enum member names, you can use the x-speakeasy-enums
extension. This extension allows you to provide alternative names for each value in the enum
field.
An example of how this is used is shown below:
schema:
type: integer
enum:
- 1
- 2
- 3
x-speakeasy-enums:
- NOT_STARTED
- IN_PROGRESS
- COMPLETE
The order of the values in the x-speakeasy-enums
will correspond to the values in the original enum
. The provided names will then be transformed into symbols suitable for the target language.