test_fuzz_internal/
serde_format.rsuse serde::{de::DeserializeOwned, Serialize};
use std::io::Read;
#[cfg(any(serde_default, feature = "__serde_bincode"))]
const BYTE_LIMIT: u64 = 1024 * 1024 * 1024;
#[cfg(feature = "__serde_postcard")]
const SLIDING_BUFFER_SIZE: usize = 2048;
#[allow(clippy::vec_init_then_push)]
#[must_use]
pub fn as_feature() -> &'static str {
let mut formats = vec![];
#[cfg(any(serde_default, feature = "__serde_bincode"))]
formats.push("serde_bincode");
#[cfg(feature = "__serde_postcard")]
formats.push("serde_postcard");
assert!(
formats.len() <= 1,
"Multiple serde formats selected: {formats:?}"
);
formats.pop().expect("No serde format selected")
}
pub fn serialize<T: Serialize>(args: &T) -> Vec<u8> {
#[cfg(any(serde_default, feature = "__serde_bincode"))]
return {
use bincode::Options;
bincode::options()
.with_limit(BYTE_LIMIT)
.serialize(args)
.unwrap()
};
#[cfg(feature = "__serde_postcard")]
return {
let mut data = Vec::new();
postcard::to_io(args, &mut data).unwrap();
data
};
}
pub fn deserialize<T: DeserializeOwned, R: Read>(reader: R) -> Option<T> {
#[cfg(any(serde_default, feature = "__serde_bincode"))]
return {
use bincode::Options;
bincode::options()
.with_limit(BYTE_LIMIT)
.deserialize_from(reader)
.ok()
};
#[cfg(feature = "__serde_postcard")]
return {
let mut buff = [0; SLIDING_BUFFER_SIZE];
postcard::from_io((reader, &mut buff))
.map(|(value, _)| value)
.ok()
};
}