| 1 | /// Custom color structure, it will generate a true color in the result |
|---|---|
| 2 | #[derive(Debug, Copy, Clone, PartialEq, Eq)] |
| 3 | pub struct CustomColor { |
| 4 | /// Red |
| 5 | pub r: u8, |
| 6 | /// Green |
| 7 | pub g: u8, |
| 8 | /// Blue |
| 9 | pub b: u8, |
| 10 | } |
| 11 | |
| 12 | /// This only makes custom color creation easier. |
| 13 | impl CustomColor { |
| 14 | /// Create a new custom color |
| 15 | pub fn new(r: u8, g: u8, b: u8) -> Self { |
| 16 | Self { r, g, b } |
| 17 | } |
| 18 | } |
| 19 | |
| 20 | impl From<(u8, u8, u8)> for CustomColor { |
| 21 | fn from((r: u8, g: u8, b: u8): (u8, u8, u8)) -> Self { |
| 22 | Self::new(r, g, b) |
| 23 | } |
| 24 | } |
| 25 | |
| 26 | #[cfg(test)] |
| 27 | mod tests { |
| 28 | use crate::*; |
| 29 | #[cfg_attr(feature = "no-color", ignore)] |
| 30 | #[test] |
| 31 | fn main() { |
| 32 | let my_color = CustomColor::new(0, 120, 120); |
| 33 | insta::assert_snapshot!("Greetings from Ukraine".custom_color(my_color)); |
| 34 | } |
| 35 | |
| 36 | #[test] |
| 37 | fn from_tuple() { |
| 38 | let tuple = (1u8, 255u8, 0u8); |
| 39 | let cc = CustomColor::from(tuple); |
| 40 | |
| 41 | assert_eq!(cc.r, tuple.0); |
| 42 | assert_eq!(cc.g, tuple.1); |
| 43 | assert_eq!(cc.b, tuple.2); |
| 44 | } |
| 45 | } |
| 46 |
