use core::fmt::Debug;
use crate::test::to_bytes;
use crate::{Serialize, access_mut};
pub fn to_archived<T: Serialize>(value: &T, f: impl FnOnce(&mut T::Archived)) {
to_bytes(value, |bytes| to_archived_from_bytes::<T>(bytes, f));
}
pub fn to_archived_from_bytes<T: Serialize>(bytes: &mut [u8], f: impl FnOnce(&mut T::Archived)) {
let archived_value = access_mut::<T>(bytes).unwrap();
f(archived_value);
}
pub fn roundtrip_with<T: Debug + Serialize<Archived: Debug>>(
value: &T,
cmp: impl Fn(&T, &T::Archived),
) {
to_archived(value, |archived_value| cmp(value, &*archived_value));
}
pub fn roundtrip<T: Debug + Serialize<Archived: Debug + PartialEq<T>>>(value: &T) {
roundtrip_with(value, |a, b| assert_eq!(b, a));
}