Variant Payloads
You can define richer enums where the variants carry data. You can then use the
match statement to extract the data from each variant:
enum WebEvent {PageLoad, // Variant without payloadKeyPress(char), // Tuple struct variantClick { x: i64, y: i64 }, // Full struct variant}#[rustfmt::skip]fn inspect(event: WebEvent) {match event {WebEvent::PageLoad => println!("page loaded"),WebEvent::KeyPress(c) => println!("pressed '{c}'"),WebEvent::Click { x, y } => println!("clicked at x={x}, y={y}"),}}fn main() {let load = WebEvent::PageLoad;let press = WebEvent::KeyPress('x');let click = WebEvent::Click { x: 20, y: 80 };inspect(load);inspect(press);inspect(click);}
Speaker Notes
- In the above example, accessing the
charinKeyPress, orxandyinClickonly works within amatchstatement. matchinspects a hidden discriminant field in theenum.