1use serde::{Serialize, de::DeserializeOwned};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum CodecError {
10 #[error("could not encode a message: {0}")]
11 Encode(#[from] rmp_serde::encode::Error),
12 #[error("could not decode a message: {0}")]
13 Decode(#[from] rmp_serde::decode::Error),
14}
15
16pub fn encode<T: Serialize>(message: &T) -> Result<Vec<u8>, CodecError> {
17 Ok(rmp_serde::to_vec_named(message)?)
18}
19
20pub fn decode<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
21 Ok(rmp_serde::from_slice(bytes)?)
22}