use std::error::Error;
use deltae::*;
fn main() -> Result<(), Box<dyn Error>>{
let lab0: LabValue = "89.73, 1.88, -6.96".parse()?;
let lab1 = LabValue {
l: 95.08,
a: -0.17,
b: -10.81,
}.validate()?;
#[derive(Clone, Copy)]
struct MyLab(f32, f32, f32);
impl From<MyLab> for LabValue {
fn from(mylab: MyLab) -> Self {
LabValue { l: mylab.0, a: mylab.1, b: mylab.2 }
}
}
let mylab = MyLab(95.08, -0.17, -10.81);
impl<D: Delta + Copy> DeltaEq<D> for MyLab {}
assert_delta_eq!(mylab, lab1, DE2000, 0.0, "mylab is not equal to lab1!");
let de0 = DeltaE::new(lab0, lab1, DE2000);
let de1 = lab0.delta(lab1, DE2000);
assert_eq!(de0, de1);
let lch0 = LchValue::from(lab0);
let xyz0 = XyzValue::from(lab1);
assert!(lch0.delta_eq(lab0, DE2000, 1.0));
assert!(xyz0.delta_eq(lab1, DE2000, 1.0));
let de2 = lch0.delta(xyz0, DE2000);
assert_eq!(de2.round_to(4), de0.round_to(4));
let de3 = de2.with_method(DE1976);
println!("{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}\n",
lab0, lab1, lch0, xyz0, de0, de1, de2, de3, );
Ok(())
}