#![allow(dead_code)]
use core::fmt::Debug;
use crate::{
access_unchecked_mut,
api::test::{deserialize, to_bytes, TestDeserializer, TestSerializer},
seal::Seal,
Archive, Deserialize, Serialize,
};
pub fn to_archived<T>(value: &T, f: impl FnOnce(Seal<'_, T::Archived>))
where
T: for<'a> Serialize<TestSerializer<'a>>,
{
to_bytes(value, |bytes| to_archived_from_bytes::<T>(bytes, f));
}
pub fn to_archived_from_bytes<T>(
bytes: &mut [u8],
f: impl FnOnce(Seal<'_, T::Archived>),
) where
T: Archive,
{
let archived_value = unsafe { access_unchecked_mut::<T::Archived>(bytes) };
f(archived_value);
}
pub fn roundtrip_with<T>(value: &T, cmp: impl Fn(&T, &T::Archived))
where
T: Debug + PartialEq + for<'a> Serialize<TestSerializer<'a>>,
T::Archived: Debug + Deserialize<T, TestDeserializer>,
{
to_archived(value, |archived_value| {
cmp(value, &*archived_value);
let deserialized = deserialize::<T>(&*archived_value);
assert_eq!(value, &deserialized);
});
}
pub fn roundtrip<T>(value: &T)
where
T: Debug + PartialEq + for<'a> Serialize<TestSerializer<'a>>,
T::Archived: Debug + PartialEq<T> + Deserialize<T, TestDeserializer>,
{
roundtrip_with(value, |a, b| assert_eq!(b, a));
}