From b26aaf2095e294b1ff32ff7fd4a8c8c7199256e8 Mon Sep 17 00:00:00 2001
From: lukaszKielar <kielar.lukasz@hotmail.com>
Date: Sun, 21 Jun 2020 21:15:06 +0200
Subject: [PATCH] finish enums exercises

---
 exercises/enums/enums1.rs |  7 ++++---
 exercises/enums/enums2.rs | 11 ++++++-----
 exercises/enums/enums3.rs | 27 ++++++++++++++++-----------
 3 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/exercises/enums/enums1.rs b/exercises/enums/enums1.rs
index a2223d3..adf7f01 100644
--- a/exercises/enums/enums1.rs
+++ b/exercises/enums/enums1.rs
@@ -1,11 +1,12 @@
 // enums1.rs
 // Make me compile! Execute `rustlings hint enums1` for hints!
 
-// I AM NOT DONE
-
 #[derive(Debug)]
 enum Message {
-    // TODO: define a few types of messages as used below
+    Quit,
+    Echo,
+    Move,
+    ChangeColor,
 }
 
 fn main() {
diff --git a/exercises/enums/enums2.rs b/exercises/enums/enums2.rs
index 52ccb22..6b9b42c 100644
--- a/exercises/enums/enums2.rs
+++ b/exercises/enums/enums2.rs
@@ -1,11 +1,12 @@
 // enums2.rs
 // Make me compile! Execute `rustlings hint enums2` for hints!
 
-// I AM NOT DONE
-
 #[derive(Debug)]
 enum Message {
-    // TODO: define the different variants used below
+    Move { x: u8, y: u8 },
+    Echo(String),
+    ChangeColor(u8, u8, u8),
+    Quit,
 }
 
 impl Message {
@@ -16,10 +17,10 @@ impl Message {
 
 fn main() {
     let messages = [
-        Message::Move{ x: 10, y: 30 },
+        Message::Move { x: 10, y: 30 },
         Message::Echo(String::from("hello world")),
         Message::ChangeColor(200, 255, 255),
-        Message::Quit
+        Message::Quit,
     ];
 
     for message in &messages {
diff --git a/exercises/enums/enums3.rs b/exercises/enums/enums3.rs
index 4b0be97..8fa56fb 100644
--- a/exercises/enums/enums3.rs
+++ b/exercises/enums/enums3.rs
@@ -1,21 +1,22 @@
 // enums3.rs
 // Address all the TODOs to make the tests pass!
 
-// I AM NOT DONE
-
 enum Message {
-    // TODO: implement the message variant types based on their usage below
+    Move(Point),
+    Echo(String),
+    ChangeColor(u8, u8, u8),
+    Quit,
 }
 
 struct Point {
     x: u8,
-    y: u8
+    y: u8,
 }
 
 struct State {
     color: (u8, u8, u8),
     position: Point,
-    quit: bool
+    quit: bool,
 }
 
 impl State {
@@ -36,7 +37,12 @@ impl State {
     }
 
     fn process(&mut self, message: Message) {
-        // TODO: create a match expression to process the different message variants
+        match message {
+            Message::ChangeColor(r, g, b) => self.change_color((r, g, b)),
+            Message::Quit => self.quit(),
+            Message::Echo(s) => self.echo(s),
+            Message::Move(p) => self.move_position(p),
+        }
     }
 }
 
@@ -46,14 +52,14 @@ mod tests {
 
     #[test]
     fn test_match_message_call() {
-        let mut state = State{
+        let mut state = State {
             quit: false,
-            position: Point{ x: 0, y: 0 },
-            color: (0, 0, 0)
+            position: Point { x: 0, y: 0 },
+            color: (0, 0, 0),
         };
         state.process(Message::ChangeColor(255, 0, 255));
         state.process(Message::Echo(String::from("hello world")));
-        state.process(Message::Move(Point{ x: 10, y: 15 }));
+        state.process(Message::Move(Point { x: 10, y: 15 }));
         state.process(Message::Quit);
 
         assert_eq!(state.color, (255, 0, 255));
@@ -61,5 +67,4 @@ mod tests {
         assert_eq!(state.position.y, 15);
         assert_eq!(state.quit, true);
     }
-
 }