Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
#[derive(Debug, Clone)] enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColour(u8, u8, u8), } impl Message { fn describe(&self) -> String { match self { Message::Quit => "quit".to_string(), Message::Move { x, y } => format!("move to ({x}, {y})"), Message::Write(text) => format!("write: {text}"), Message::ChangeColour(r, g, b) => format!("colour: rgb({r},{g},{b})"), } } fn is_quit(&self) -> bool { matches!(self, Message::Quit) } } // State machine example #[derive(Debug)] enum TrafficLight { Red, Yellow, Green, } impl TrafficLight { fn next(self) -> Self { match self { TrafficLight::Red => TrafficLight::Green, TrafficLight::Green => TrafficLight::Yellow, TrafficLight::Yellow => TrafficLight::Red, } } fn duration_secs(&self) -> u32 { match self { TrafficLight::Red => 60, TrafficLight::Green => 45, TrafficLight::Yellow => 5 } } } fn main() { let messages = vec![ Message::Move { x: 10, y: 20 }, Message::Write(String::from("hello")), Message::ChangeColour(255, 0, 128), Message::Quit, ]; for m in &messages { println!("{}", m.describe()); } println!("last is quit: {}", messages.last().unwrap().is_quit()); let mut light = TrafficLight::Red; for _ in 0..4 { println!("{:?} — {}s", light, light.duration_secs()); light = light.next(); } }
Result
Open