use serde::{Serialize, de::DeserializeOwned};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum CodecError {
#[error("could not encode a message: {0}")]
Encode(#[from] rmp_serde::encode::Error),
#[error("could not decode a message: {0}")]
Decode(#[from] rmp_serde::decode::Error),
}
pub fn encode<T: Serialize>(message: &T) -> Result<Vec<u8>, CodecError> {
Ok(rmp_serde::to_vec_named(message)?)
}
pub fn decode<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
Ok(rmp_serde::from_slice(bytes)?)
}