Enums
What Enums Are¶
Enums define a named set of possible values.
Use enums when a field should accept only one value from a known list.
Implicit String Values¶
When a member has no explicit value, its value is the member name.
This is equivalent to:
Explicit String Values¶
Use explicit strings when the wire value should differ from the member name.
This is common when generated code should use nice member names while serialized data uses lowercase values.
Integer Enums¶
Enums can use integer values.
For integer enums, every member must have an explicit integer value.
Invalid:
Do Not Mix Value Kinds¶
An enum must be consistently string-based or integer-based.
Invalid:
Unique Names And Values¶
Member names must be unique.
Invalid:
Member values must also be unique.
Invalid:
Enum Member Docstrings¶
enum InvoiceStatus {
""" The invoice is editable and has not been sent. """
Draft
""" The invoice has been paid in full. """
Paid
}
Enum Member Annotations¶
Annotations on enum members are available to plugins.
Enum Spreads¶
Enums can reuse members from another enum with ...Name.
enum StandardRole {
Viewer = "viewer"
Editor = "editor"
}
enum WorkspaceRole {
...StandardRole
Owner = "owner"
}
Enum spreads must reference another enum and must use the Name form, not Name.Member.
Naming¶
Enum names and member names should use PascalCase.