use alloc::vec::Vec;
use iceoryx2_log::fail;
use crate::serialize::Serialize;
use super::{DeserializeError, SerializeError};
#[derive(Debug)]
pub struct Postcard {}
impl Serialize for Postcard {
fn serialize<T: serde::Serialize>(value: &T) -> Result<Vec<u8>, super::SerializeError> {
match postcard::to_allocvec(value) {
Ok(vec) => Ok(vec),
Err(e) => {
fail!(
from "Postcard::serialize",
with SerializeError::InternalError,
"Failed to serialize object: {e}"
);
}
}
}
fn deserialize<T: serde::de::DeserializeOwned>(
bytes: &[u8],
) -> Result<T, super::DeserializeError> {
match postcard::from_bytes(bytes) {
Ok(obj) => Ok(obj),
Err(e) => {
fail!(
from "Postcard::deserialize",
with DeserializeError::InternalError,
"Failed to deserialize object: {e}"
);
}
}
}
}