pub struct AsBits;
macro_rules! impl_as_bits {
($prim:ty) => {
impl<T: bitflags::Flags<Bits = $prim> + Copy> ::rkyv::with::ArchiveWith<T> for AsBits {
type Archived = $prim;
type Resolver = ();
fn resolve_with(field: &T, _: (), out: ::rkyv::place::Place<$prim>) {
out.write(field.bits());
}
}
impl<T, S> ::rkyv::with::SerializeWith<T, S> for AsBits
where
T: ::bitflags::Flags<Bits = $prim> + Copy,
S: ::rkyv::rancor::Fallible + ?Sized,
{
fn serialize_with(_: &T, _: &mut S) -> Result<(), S::Error> {
Ok(())
}
}
impl<T, D> ::rkyv::with::DeserializeWith<$prim, T, D> for AsBits
where
T: ::bitflags::Flags<Bits = $prim>,
D: ::rkyv::rancor::Fallible + ?Sized,
{
fn deserialize_with(field: &$prim, _: &mut D) -> Result<T, D::Error> {
Ok(T::from_bits_truncate(*field))
}
}
};
}
impl_as_bits!(u8);