mod conversions;
#[cfg(test)]
mod tests;
use conversions::FROM_SRGB_CONVERSION_MATRIX;
#[derive(Debug, PartialEq, Clone, Copy)]
pub struct Ciexyz(f32, f32, f32);
pub const D65: Ciexyz = {
let [xr, xg, xb, yr, yg, yb, zr, zg, zb] = FROM_SRGB_CONVERSION_MATRIX;
let x = xr + xg + xb;
let y = yr + yg + yb;
let z = zr + zg + zb;
Ciexyz(x, y, z)
};
impl Ciexyz {
pub fn new(x: f32, y: f32, z: f32) -> Option<Self> {
match x >= 0f32 && (0f32..=1f32).contains(&y) && z >= 0f32 {
true => Some(Self(x, y, z)),
false => None,
}
}
pub fn x(&self) -> f32 {
self.0
}
pub fn y(&self) -> f32 {
self.1
}
pub fn z(&self) -> f32 {
self.2
}
}