use palette::Oklch;
pub const ANSI256_MAX_CHROMA: f32 = 0.32249102;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub struct OklchQuantized {
pub l: u8,
pub chroma: u8,
pub hue: u8,
}
impl From<Oklch> for OklchQuantized {
fn from(Oklch { l, chroma, hue }: Oklch) -> Self {
let l = (l * 255.0).clamp(0.0, 255.0) as u8;
assert!(chroma >= 0.0);
assert!(chroma <= ANSI256_MAX_CHROMA);
let chroma = chroma / ANSI256_MAX_CHROMA * 255.0;
let chroma = chroma.clamp(0.0, 255.0) as u8;
let hue = if chroma == 0u8 {
0u8
} else {
let hue_degree = hue.into_degrees(); let hue = hue_degree.mul_add(1.0 / 180.0, 1.0) / 2.0 * 255.0;
hue.clamp(0.0, 255.0) as u8
};
OklchQuantized { l, chroma, hue }
}
}