diff --git a/exercises/conversions/try_from_into.rs b/exercises/conversions/try_from_into.rs
index dbdbe00..64362db 100644
--- a/exercises/conversions/try_from_into.rs
+++ b/exercises/conversions/try_from_into.rs
@@ -2,7 +2,7 @@
 // Basically, this is the same as From. The main difference is that this should return a Result type
 // instead of the target type itself.
 // You can read more about it at https://doc.rust-lang.org/std/convert/trait.TryFrom.html
-use std::convert::{TryInto, TryFrom};
+use std::convert::{TryFrom, TryInto};
 
 #[derive(Debug)]
 struct Color {
@@ -11,8 +11,6 @@ struct Color {
     blue: u8,
 }
 
-// I AM NOT DONE
-
 // Your task is to complete this implementation
 // and return an Ok result of inner type Color.
 // You need create implementation for a tuple of three integer,
@@ -26,6 +24,19 @@ struct Color {
 impl TryFrom<(i16, i16, i16)> for Color {
     type Error = String;
     fn try_from(tuple: (i16, i16, i16)) -> Result<Self, Self::Error> {
+        if (tuple.0 < 0) | (tuple.0 > 256) {
+            Err(format!("{} not in a range <0, 255>", tuple.0))
+        } else if (tuple.1 < 0) | (tuple.1 > 256) {
+            Err(format!("{} not in a range <0, 255>", tuple.1))
+        } else if (tuple.2 < 0) | (tuple.2 > 256) {
+            Err(format!("{} not in a range <0, 255>", tuple.2))
+        } else {
+            Ok(Color {
+                red: tuple.0 as u8,
+                green: tuple.1 as u8,
+                blue: tuple.2 as u8,
+            })
+        }
     }
 }
 
@@ -33,6 +44,24 @@ impl TryFrom<(i16, i16, i16)> for Color {
 impl TryFrom<[i16; 3]> for Color {
     type Error = String;
     fn try_from(arr: [i16; 3]) -> Result<Self, Self::Error> {
+        if arr.len() != 3 {
+            Err(format!(
+                "Cannot construct Color struct from {:?} array",
+                arr
+            ))
+        } else if (arr[0] < 0) | (arr[0] > 256) {
+            Err(format!("{} not in a range <0, 255>", arr[0]))
+        } else if (arr[1] < 0) | (arr[1] > 256) {
+            Err(format!("{} not in a range <0, 255>", arr[1]))
+        } else if (arr[2] < 0) | (arr[2] > 256) {
+            Err(format!("{} not in a range <0, 255>", arr[2]))
+        } else {
+            Ok(Color {
+                red: arr[0] as u8,
+                green: arr[1] as u8,
+                blue: arr[2] as u8,
+            })
+        }
     }
 }
 
@@ -40,6 +69,24 @@ impl TryFrom<[i16; 3]> for Color {
 impl TryFrom<&[i16]> for Color {
     type Error = String;
     fn try_from(slice: &[i16]) -> Result<Self, Self::Error> {
+        if slice.len() != 3 {
+            Err(format!(
+                "Cannot construct Color struct from {:?} slice",
+                slice
+            ))
+        } else if (slice[0] < 0) | (slice[0] > 256) {
+            Err(format!("{} not in a range <0, 255>", slice[0]))
+        } else if (slice[1] < 0) | (slice[1] > 256) {
+            Err(format!("{} not in a range <0, 255>", slice[1]))
+        } else if (slice[2] < 0) | (slice[2] > 256) {
+            Err(format!("{} not in a range <0, 255>", slice[2]))
+        } else {
+            Ok(Color {
+                red: slice[0] as u8,
+                green: slice[1] as u8,
+                blue: slice[2] as u8,
+            })
+        }
     }
 }