pub trait StableHeap {
fn heap_to_bytes(&self) -> Vec<u8>;
fn heap_from_bytes(&mut self, bytes: &[u8]);
}
pub fn to_bytes<T: ?Sized + serde::Serialize>(value: &T) -> Result<Vec<u8>, &'static str> {
let mut bytes = vec![];
ciborium::ser::into_writer(value, &mut bytes).map_err(|e| match e {
ciborium::ser::Error::Io(_) => "write bytes failed.",
ciborium::ser::Error::Value(_) => "serialize failed.",
})?;
Ok(bytes)
}
pub fn from_bytes<T: serde::de::DeserializeOwned>(bytes: &[u8]) -> Result<T, &'static str> {
ciborium::de::from_reader(bytes).map_err(|_| "deserialize failed.")
}