redgold_schema/util/
cbor.rs

1use crate::{ErrorInfoContext, RgResult};
2use serde::{Deserialize, Serialize};
3
4pub trait SerdeCborConverters {
5    fn to_cbor(&self) -> RgResult<Vec<u8>>;
6    fn from_cbor(payload: Vec<u8>) -> RgResult<Self> where Self: Sized;
7}
8
9impl<T> SerdeCborConverters for T where T: Serialize + for<'a> Deserialize<'a> {
10    fn to_cbor(&self) -> RgResult<Vec<u8>> {
11        let cbor = serde_cbor::to_vec(&self).error_info("cbor serialization failed")?;
12        Ok(cbor)
13    }
14
15    fn from_cbor(payload: Vec<u8>) -> RgResult<Self> {
16        let tx = serde_cbor::from_slice(&payload).error_info("cbor deserialization failed")?;
17        Ok(tx)
18    }
19}