From 77b687d501771c24bd83294d97b8e6f9ffa92d6b Mon Sep 17 00:00:00 2001
From: Matthias Richter <matthias.ri97@gmail.com>
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 25525b2..ab87270 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 df93fe0..133c779 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 92d18c4..fffb9d0 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 887662a..578d01c 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"