co_primitives/library/
cbor.rs1use serde::{Deserialize, Serialize};
5
6pub fn to_cbor<T: Serialize>(value: &T) -> Result<Vec<u8>, CborError> {
8 serde_ipld_dagcbor::to_vec(value)
9 .map_err(|err| CborError::Serialize(std::any::type_name::<T>().to_owned(), err.to_string()))
10}
11
12pub fn from_cbor<'a, T: Deserialize<'a>>(value: &'a [u8]) -> Result<T, CborError> {
14 serde_ipld_dagcbor::from_slice(value)
15 .map_err(|err| CborError::Deserialize(std::any::type_name::<T>().to_owned(), err.to_string()))
16}
17
18#[derive(Debug, thiserror::Error)]
19pub enum CborError {
20 #[error("Serialize {0} to CBOR failed: {1}")]
21 Serialize(String, String),
22
23 #[error("Deserialize {0} from CBOR failed: {1}")]
24 Deserialize(String, String),
25}