use binrw::binrw;
#[binrw]
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum ColorIndex {
#[brw(magic = 0u8)]
None,
#[brw(magic = 1u8)]
Pink,
#[brw(magic = 2u8)]
Red,
#[brw(magic = 3u8)]
Orange,
#[brw(magic = 4u8)]
Yellow,
#[brw(magic = 5u8)]
Green,
#[brw(magic = 6u8)]
Aqua,
#[brw(magic = 7u8)]
Blue,
#[brw(magic = 8u8)]
Purple,
}
#[cfg(test)]
pub(crate) mod testing {
use binrw::{
meta::{ReadEndian, WriteEndian},
prelude::*,
};
pub fn test_roundtrip<T>(bin: &[u8], obj: T)
where
<T as binrw::BinRead>::Args: Default,
<T as binrw::BinWrite>::Args: Default,
T: BinRead + BinWrite + PartialEq + core::fmt::Debug + ReadEndian + WriteEndian,
{
let mut writer = binrw::io::Cursor::new(Vec::with_capacity(bin.len()));
obj.write(&mut writer).unwrap();
assert_eq!(bin, writer.get_ref());
writer.set_position(0);
let parsed = T::read(&mut writer).unwrap();
assert_eq!(obj, parsed);
let mut cursor = binrw::io::Cursor::new(bin);
let parsed = T::read(&mut cursor).unwrap();
assert_eq!(obj, parsed);
writer.set_position(0);
parsed.write(&mut writer).unwrap();
assert_eq!(bin, writer.get_ref());
}
}