45 lines
1.2 KiB
Rust
45 lines
1.2 KiB
Rust
|
use std::fmt::{self, Display};
|
||
|
|
||
|
use name::ColorName;
|
||
|
|
||
|
mod name;
|
||
|
|
||
|
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
|
||
|
pub(crate) struct Color {
|
||
|
red: u16,
|
||
|
green: u16,
|
||
|
blue: u16,
|
||
|
alpha: u16,
|
||
|
repr: ColorRepr,
|
||
|
}
|
||
|
|
||
|
impl Display for Color {
|
||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||
|
match self.repr {
|
||
|
ColorRepr::Name(n) => write!(f, "{}", n),
|
||
|
ColorRepr::Hex3 => todo!(), //write!(f, "#{}{}{}", self.red, self.green, self.blue),
|
||
|
ColorRepr::Hex6 => write!(f, "#{:X}{:X}{:X}", self.red, self.green, self.blue),
|
||
|
ColorRepr::Hex8 => write!(
|
||
|
f,
|
||
|
"#{:X}{:X}{:X}{:X}",
|
||
|
self.red, self.green, self.blue, self.alpha
|
||
|
),
|
||
|
ColorRepr::Function if self.alpha < 1 => write!(
|
||
|
f,
|
||
|
"rgba({}, {}, {}, {})",
|
||
|
self.red, self.green, self.blue, self.alpha
|
||
|
),
|
||
|
ColorRepr::Function => write!(f, "#{:X}{:X}{:X}", self.red, self.green, self.blue),
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
|
||
|
enum ColorRepr {
|
||
|
Name(ColorName),
|
||
|
Hex3,
|
||
|
Hex6,
|
||
|
Hex8,
|
||
|
Function,
|
||
|
}
|