1pub use basic::{
2 BadBassicColorCode,
3 BasicColor,
4 BasicColorParts,
5 BasicColorVariant,
6};
7pub use brightness::{
8 ApproxBrightness,
9 Brightness,
10 BrightnessError,
11 BrightnessLevel,
12 MutableApproxBrightness,
13};
14
15mod brightness;
16mod basic;
17
18pub(crate) mod native_ext;
19
20pub mod mutation;
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
23pub struct ColorPair {
24 pub background: Color,
25 pub foreground: Color,
26}
27
28impl Default for ColorPair {
29 fn default() -> Self {
30 Self {
31 background: BasicColor::Black.into(),
32 foreground: BasicColor::White.into(),
33 }
34 }
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
38pub enum Color {
39 Basic(BasicColor),
40}
41
42impl From<BasicColor> for Color {
43 fn from(color: BasicColor) -> Self {
44 Color::Basic(color)
45 }
46}
47
48impl Default for Color {
49 fn default() -> Self {
50 Self::from(BasicColor::default())
51 }
52}
53
54impl ApproxBrightness for Color {
55 fn approx_brightness(&self) -> Result<Brightness, BrightnessError> {
56 match self {
57 Self::Basic(color) => color.approx_brightness(),
58 }
59 }
60}
61
62impl MutableApproxBrightness for Color {
63 fn set_approx_brightness(
64 &mut self,
65 brightness: Brightness,
66 ) -> Result<(), BrightnessError> {
67 match self {
68 Self::Basic(color) => color.set_approx_brightness(brightness),
69 }
70 }
71}