use afl::fuzz;
use arbitrary::Arbitrary;
#[derive(Arbitrary, Debug, PartialEq, Eq)]
pub struct Rgb {
pub r: u8,
pub g: u8,
pub b: u8,
}
impl Rgb {
#[must_use]
pub fn as_hex(&self) -> Hex {
let Rgb { r, g, b } = self;
Hex(format!("{r:02X}{g:02X}{b:02X}"))
}
}
pub struct Hex(String);
impl Hex {
fn as_rgb(&self) -> Rgb {
let s = self.0.as_str();
let r = u8::from_str_radix(&s[..2], 16).unwrap();
let g = u8::from_str_radix(&s[2..4], 16).unwrap();
let b = u8::from_str_radix(&s[4..6], 16).unwrap();
Rgb { r, g, b }
}
}
pub fn main() {
fuzz!(|color: Rgb| {
let hex = color.as_hex();
let rgb = hex.as_rgb();
assert_eq!(color, rgb);
});
}