Skip to main content

canic_cdk/
serialize.rs

1//!
2//! serde_cbor-powered serialization helpers ensuring deterministic codecs across
3//! canisters. Provides a thin wrapper with shared error handling for CBOR
4//! round-trips in stable structures.
5//!
6
7use serde::{Serialize, de::DeserializeOwned};
8use serde_cbor::{from_slice, to_vec};
9use thiserror::Error as ThisError;
10
11///
12/// SerializeError
13///
14/// Error variants wrapping CBOR serialization or deserialization failures.
15#[derive(Debug, ThisError)]
16pub enum SerializeError {
17    /// CBOR serialization failed.
18    #[error("serialize error: {0}")]
19    Serialize(String),
20
21    /// CBOR deserialization failed.
22    #[error("deserialize error: {0}")]
23    Deserialize(String),
24}
25
26///
27/// Serialize a value into CBOR bytes using serde_cbor.
28///
29pub fn serialize<T>(value: &T) -> Result<Vec<u8>, SerializeError>
30where
31    T: Serialize,
32{
33    to_vec(value).map_err(|err| SerializeError::Serialize(err.to_string()))
34}
35
36///
37/// Deserialize CBOR bytes into a value using serde_cbor.
38///
39pub fn deserialize<T>(bytes: &[u8]) -> Result<T, SerializeError>
40where
41    T: DeserializeOwned,
42{
43    from_slice(bytes).map_err(|err| SerializeError::Deserialize(err.to_string()))
44}