1pub struct Color {
2 pub r: u8,
3 pub g: u8,
4 pub b: u8,
5 pub a: u8,
6}
7
8impl Color {
9 pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Self {
10 Self {
11 r,
12 g,
13 b,
14 a
15 }
16 }
17}
18
19impl From<&str> for Color {
20 fn from(value: &str) -> Self {
21 let value = value.trim_start_matches('#');
22 let r = u8::from_str_radix(&value[0..2], 16).unwrap_or(0);
23 let g = u8::from_str_radix(&value[2..4], 16).unwrap_or(0);
24 let b = u8::from_str_radix(&value[4..6], 16).unwrap_or(0);
25 Self { r, g, b, a: 255 }
26 }
27}
28
29impl From<u32> for Color {
30 fn from(value: u32) -> Self {
31 Self {
32 r: (value >> 16) as u8,
33 g: (value >> 8) as u8,
34 b: value as u8,
35 a: 255,
36 }
37 }
38}