canic_memory/
serialize.rs1use serde::{Serialize, de::DeserializeOwned};
8use serde_cbor::{from_slice, to_vec};
9use std::fmt::Debug;
10use thiserror::Error as ThisError;
11
12#[derive(Debug, ThisError)]
20pub enum SerializeError {
21 #[error("serialize error: {0}")]
23 Serialize(String),
24
25 #[error("deserialize error: {0}")]
27 Deserialize(String),
28}
29
30pub fn serialize<T>(t: &T) -> Result<Vec<u8>, SerializeError>
34where
35 T: Serialize,
36{
37 let bytes = to_vec(t).map_err(|e| SerializeError::Serialize(e.to_string()))?;
38
39 Ok(bytes)
40}
41
42pub fn deserialize<T>(bytes: &[u8]) -> Result<T, SerializeError>
46where
47 T: DeserializeOwned,
48{
49 let t: T = from_slice(bytes).map_err(|e| SerializeError::Deserialize(e.to_string()))?;
50
51 Ok(t)
52}