use std::io::Read;
use std::sync::Arc;
use serde::{Deserialize, Serialize};
use thiserror::Error;
pub fn encode_cbor<T: Serialize>(value: &T) -> Result<Vec<u8>, EncodeError> {
let value = cbor_core::Value::serialized(&value)?;
Ok(value.encode())
}
pub fn decode_cbor<T: for<'a> Deserialize<'a>, R: Read>(reader: R) -> Result<T, DecodeError> {
let value =
cbor_core::Value::read_from(reader).map_err(|err| DecodeError::Io(Arc::new(err)))?;
Ok(cbor_core::Value::deserialized(&value)?)
}
#[derive(Debug, Error)]
#[error(transparent)]
pub struct EncodeError(#[from] cbor_core::SerdeError);
#[derive(Clone, Debug, Error)]
pub enum DecodeError {
#[error("an error occurred while reading bytes: {0}")]
Io(Arc<cbor_core::IoError>),
#[error(transparent)]
Serde(#[from] cbor_core::SerdeError),
}