Skip to main content

canic_core/cdk/
serialize.rs

1//! Module: cdk::serialize
2//!
3//! Responsibility: serde-CBOR helpers for stable storage encoding.
4//! Does not own: individual stable schema bounds or migration policy.
5//! Boundary: maps serde encode/decode failures into typed Canic errors.
6
7use serde::{Serialize, de::DeserializeOwned};
8use serde_cbor::{from_slice, to_vec};
9use thiserror::Error as ThisError;
10
11///
12/// SerializeError
13///
14/// Typed error returned by Canic stable serialization helpers.
15///
16
17#[derive(Debug, ThisError)]
18pub enum SerializeError {
19    #[error("serialize error: {0}")]
20    Serialize(String),
21
22    #[error("deserialize error: {0}")]
23    Deserialize(String),
24}
25
26/// Serialize one value to CBOR bytes.
27pub fn serialize<T>(value: &T) -> Result<Vec<u8>, SerializeError>
28where
29    T: Serialize,
30{
31    to_vec(value).map_err(|err| SerializeError::Serialize(err.to_string()))
32}
33
34/// Deserialize one value from CBOR bytes.
35pub fn deserialize<T>(bytes: &[u8]) -> Result<T, SerializeError>
36where
37    T: DeserializeOwned,
38{
39    from_slice(bytes).map_err(|err| SerializeError::Deserialize(err.to_string()))
40}