#[derive(Clone, Debug, Eq, PartialEq)] pub struct Colour { pub red: u8, pub green: u8, pub blue: u8, } impl From for Colour { #[inline] fn from(string: String) -> Colour { let values: Vec<&str> = string.split(',').collect(); let red: u8 = values[0].parse().unwrap_or(0); let green: u8 = values[1].parse().unwrap_or(0); let blue: u8 = values[2].parse().unwrap_or(0); Colour { red, green, blue } } } impl ToString for Colour { #[inline] fn to_string(&self) -> String { format!("{},{},{}", self.red, self.green, self.blue) } } #[cfg(test)] mod test { use crate::colour::Colour; #[test] fn test_colour_from_string() { assert_eq!( Colour::from("0,255,0".to_string()), Colour { red: 0, green: 255, blue: 0 } ); } #[test] fn test_colour_to_string() { assert_eq!(Colour { red: 22, green: 33, blue: 44, }.to_string(), "22,33,44".to_string()); } }