use serde::{Serialize, de::DeserializeOwned};
use serde_cbor::{from_slice, to_vec};
use std::fmt::Debug;
use thiserror::Error as ThisError;
#[derive(Debug, ThisError)]
pub enum SerializeError {
#[error("serialize error: {0}")]
Serialize(String),
#[error("deserialize error: {0}")]
Deserialize(String),
}
pub fn serialize<T>(t: &T) -> Result<Vec<u8>, SerializeError>
where
T: Serialize,
{
let bytes = to_vec(t).map_err(|e| SerializeError::Serialize(e.to_string()))?;
Ok(bytes)
}
pub fn deserialize<T>(bytes: &[u8]) -> Result<T, SerializeError>
where
T: DeserializeOwned,
{
let t: T = from_slice(bytes).map_err(|e| SerializeError::Deserialize(e.to_string()))?;
Ok(t)
}