Skip to main content

co_primitives/library/
cbor.rs

1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 1io BRANDGUARDIAN GmbH
3
4use serde::{Deserialize, Serialize};
5
6/// Serialize `value` to CBOR string (using dag-json).
7pub 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
12/// Deserialize from CBOR (using dag-json).
13pub 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}