use core::mem::MaybeUninit;
use rancor::Panic;
use crate::{
api::low::{to_bytes_in_with_alloc, LowDeserializer, LowSerializer},
ser::{allocator::SubAllocator, writer::Buffer},
util::Align,
Deserialize, Serialize,
};
pub type TestSerializer<'a> =
LowSerializer<Buffer<'a>, SubAllocator<'a>, Panic>;
pub type TestDeserializer = LowDeserializer<Panic>;
pub fn to_bytes<T>(value: &T, f: impl FnOnce(&mut [u8]))
where
T: for<'a> Serialize<TestSerializer<'a>>,
{
let mut output = Align([MaybeUninit::<u8>::uninit(); 256]);
let mut alloc = [MaybeUninit::<u8>::uninit(); 256];
let mut bytes = to_bytes_in_with_alloc(
value,
Buffer::from(&mut *output),
SubAllocator::new(&mut alloc),
)
.expect("failed to serialize value");
f(&mut bytes);
}
pub fn deserialize<T>(value: &impl Deserialize<T, TestDeserializer>) -> T {
crate::api::deserialize_using::<T, _, Panic>(value, &mut ())
.expect("failed to deserialize value")
}