Enums

Enums define sum types (tagged unions): a value is exactly one of the declared variants.

Definitions

// Simple enum
pub enum Status {
  pending
  active
  completed
}

// With associated data (named parameters)
pub enum Message {
  text(content: String)
  image(url: String, size: I32)
  video(url: String, duration: I32)
}

// Generic enum
pub enum Result<T, E> {
  ok(value: T)
  error(err: E)
}

pub enum Option<T> {
  some(value: T)
  none
}

Instantiation

Enum values use the leading-dot shorthand .variant:

// Simple variant
let status1: Status = .pending
let status2: Status = .active

// With named parameters
let msg1: Message = .text(content: "Hello")
let msg2: Message = .image(url: /pic.jpg, size: 1024)

// Generic enum
let result1: Result<String, I32> = .ok(value: "success")
let result2: Result<String, I32> = .error(err: 404)

Pattern Matching

To consume enum values, use a match expression: see Control Flow & Pattern Matching. To extract associated data without matching, use enum destructuring: see Expressions / Destructuring.