use serde::{de::DeserializeOwned, Serialize};
use crate::zrpcresult::ZRPCResult;
#[cfg(feature = "resp_bincode")]
pub fn serialize<T: ?Sized>(data: &T) -> ZRPCResult<Vec<u8>>
where
T: Serialize,
{
Ok(bincode::serialize(data)?)
}
#[cfg(feature = "resp_json")]
pub fn serialize<T>(data: &T) -> ZRPCResult<Vec<u8>>
where
T: Serialize + ?Sized,
{
Ok(serde_json::to_string(data)?.into_bytes())
}
#[cfg(feature = "resp_cbor")]
pub fn serialize<T>(data: &T) -> ZRPCResult<Vec<u8>>
where
T: Serialize,
{
Ok(serde_cbor::to_vec(data)?)
}
pub fn deserialize<T>(raw_data: &[u8]) -> ZRPCResult<T>
where
T: DeserializeOwned,
{
#[cfg(feature = "resp_bincode")]
return Ok(bincode::deserialize::<T>(&raw_data)?);
#[cfg(feature = "resp_cbor")]
return Ok(serde_cbor::from_slice::<T>(raw_data)?);
#[cfg(feature = "resp_json")]
return Ok(serde_json::from_str::<T>(std::str::from_utf8(raw_data)?)?);
}