use p_arse::{CharExt, Parser, TupleExt};
#[derive(Debug)]
struct Color {
r: u8,
g: u8,
b: u8,
}
fn main() {
let parse_hex_dd = |s: &str| u8::from_str_radix(s, 16).unwrap();
let construct_color = |(r, g, b)| Color { r, g, b };
let hex_d = ('0'.to('9')).or('a'.to('f'));
let hex_dd = (hex_d, hex_d).maps(parse_hex_dd);
let color = ("#", hex_dd, hex_dd, hex_dd).r0().map(construct_color);
let (color, _tail) = color.p_arse("#defec8").unwrap();
dbg!(&color);
assert_eq!(color.r, 0xde);
assert_eq!(color.g, 0xfe);
assert_eq!(color.b, 0xc8);
}