diff --git a/exercises/08_enums/enums1.rs b/exercises/08_enums/enums1.rs index 99f70874c6..c65e641ae1 100644 --- a/exercises/08_enums/enums1.rs +++ b/exercises/08_enums/enums1.rs @@ -6,6 +6,7 @@ enum Message { fn main() { println!("{:?}", Message::Quit); println!("{:?}", Message::Echo); + println!("{:?}", Message::Resize); println!("{:?}", Message::Move); println!("{:?}", Message::ChangeColor); } diff --git a/exercises/08_enums/enums2.rs b/exercises/08_enums/enums2.rs index 32cf2a609d..5a74991a3f 100644 --- a/exercises/08_enums/enums2.rs +++ b/exercises/08_enums/enums2.rs @@ -4,6 +4,12 @@ enum Message { // TODO: Define the different variants used below. } +#[derive(Debug)] +struct Point { + x: u8, + y: u8, +} + impl Message { fn call(&self) { println!("{self:?}"); @@ -12,7 +18,8 @@ impl Message { fn main() { let messages = [ - Message::Move { x: 10, y: 30 }, + Message::Resize { w: 10, h: 30 }, + Message::Move(Point { x: 10, y: 15 }), Message::Echo(String::from("hello world")), Message::ChangeColor(200, 255, 255), Message::Quit, diff --git a/exercises/08_enums/enums3.rs b/exercises/08_enums/enums3.rs index 7dd217152a..2d0d82d4ea 100644 --- a/exercises/08_enums/enums3.rs +++ b/exercises/08_enums/enums3.rs @@ -9,6 +9,8 @@ struct Point { struct State { color: (u8, u8, u8), + width: u8, + height: u8, position: Point, quit: bool, message: String, @@ -27,6 +29,11 @@ impl State { self.message = s; } + fn resize(&mut self, width: u8, height: u8) { + self.width = width; + self.height = height; + } + fn move_position(&mut self, point: Point) { self.position = point; } @@ -50,6 +57,8 @@ mod tests { fn test_match_message_call() { let mut state = State { quit: false, + width: 0, + height: 0, position: Point { x: 0, y: 0 }, color: (0, 0, 0), message: String::from("hello world"), @@ -57,10 +66,13 @@ mod tests { state.process(Message::ChangeColor(255, 0, 255)); state.process(Message::Echo(String::from("Hello world!"))); + state.process(Message::Resize { w: 10, h: 30 }); state.process(Message::Move(Point { x: 10, y: 15 })); state.process(Message::Quit); assert_eq!(state.color, (255, 0, 255)); + assert_eq!(state.width, 10); + assert_eq!(state.height, 30); assert_eq!(state.position.x, 10); assert_eq!(state.position.y, 15); assert!(state.quit); diff --git a/rustlings-macros/info.toml b/rustlings-macros/info.toml index d75d73fc1e..715778ddb5 100644 --- a/rustlings-macros/info.toml +++ b/rustlings-macros/info.toml @@ -445,7 +445,7 @@ dir = "08_enums" test = false hint = """ You can create enumerations that have different variants with different types -such as no data, anonymous structs, a single string, tuples, etc.""" +such as anonymous structs, structs, a single string, tuples, no data, etc.""" [[exercises]] name = "enums3"