Enums
Enums restrict a value to a predefined set.
API-Level Enum
Enums at the API level are shared across contracts:
ruby
Apiwork::API.define '/api/v1' do
enum :status, values: %w[draft published archived]
resources :posts
endContract-Scoped Enum
Enums inside a contract are scoped to local use:
ruby
class PostContract < Apiwork::Contract::Base
enum :status, values: %w[draft published archived]
object :post do
uuid :id
string :title
string :status, enum: :status
end
endUsing Enums
In Params
A defined enum is referenced by name:
ruby
string :status, enum: :statusInline Validation
Without defining a separate enum:
ruby
string :status, enum: %w[draft published archived]Enum Metadata
ruby
enum :status,
values: %w[draft published archived],
description: 'Publication status',
example: 'published',
deprecated: falseGenerated Output
Introspection
json
{
"status": {
"values": ["draft", "published", "archived"],
"description": "Publication status",
"example": "published"
}
}TypeScript
typescript
export type Status = 'archived' | 'draft' | 'published';Zod
typescript
export const StatusSchema = z.enum(['archived', 'draft', 'published']);OpenAPI
yaml
Status:
type: string
enum: [draft, published, archived]
description: Publication status
example: publishedSee also
- Contract::Base reference —
enummethod