From 77b687d501771c24bd83294d97b8e6f9ffa92d6b Mon Sep 17 00:00:00 2001 From: Matthias Richter Date: Tue, 14 Nov 2023 08:19:15 +0100 Subject: [PATCH] fix(enums) make enum variants more consistent closes #1545 --- exercises/08_enums/enums1.rs | 1 + exercises/08_enums/enums2.rs | 9 ++++++++- exercises/08_enums/enums3.rs | 12 ++++++++++++ info.toml | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/exercises/08_enums/enums1.rs b/exercises/08_enums/enums1.rs index 25525b25..ab872706 100644 --- a/exercises/08_enums/enums1.rs +++ b/exercises/08_enums/enums1.rs @@ -12,6 +12,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 df93fe0f..133c7795 100644 --- a/exercises/08_enums/enums2.rs +++ b/exercises/08_enums/enums2.rs @@ -10,6 +10,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); @@ -18,7 +24,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 92d18c46..fffb9d01 100644 --- a/exercises/08_enums/enums3.rs +++ b/exercises/08_enums/enums3.rs @@ -18,6 +18,8 @@ struct Point { struct State { color: (u8, u8, u8), + width: u8, + height: u8, position: Point, quit: bool, message: String, @@ -36,6 +38,11 @@ impl State { self.message = s } + fn resize(&mut self, w: u8, h: u8) { + self.width = w; + self.height = h; + } + fn move_position(&mut self, p: Point) { self.position = p; } @@ -55,16 +62,21 @@ 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: "hello world".to_string(), }; 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_eq!(state.quit, true); diff --git a/info.toml b/info.toml index 887662ab..578d01c2 100644 --- a/info.toml +++ b/info.toml @@ -468,7 +468,7 @@ path = "exercises/08_enums/enums2.rs" mode = "compile" 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"