Enum enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), } fn process(&mut self, message: Message) { match message { Message::ChangeColor((r, g, b)) => self.change_color((r, g, b)), Message::Echo(s) => self.echo(s), Message::Move(p) => self.move_position(p), Message::Quit => self.quit() } } Quit has no data associated with it at all. Move has named fields like a struct does. Write includes a single String. ChangeColor includes three i32 values. Vector let v: Vec<i32> = Vec::new(); //empty let v = vec![1, 2, 3]; // or v.push(5); v.push(6); v.push(7); v.push(8); Strings Hash Maps use std::collections::HashMap basket.entry(Fruit::Banana).or_insert(50); // Adding a Key and Value Only If a Key Isn’t Present Links Rust Box Rust Struct