mnem_core/codec/
dagjson.rs1use bytes::Bytes;
9use serde::{Serialize, de::DeserializeOwned};
10
11use crate::error::CodecError;
12
13pub fn to_json_bytes<T: Serialize>(value: &T) -> Result<Bytes, CodecError> {
19 serde_ipld_dagjson::to_vec(value)
20 .map(Bytes::from)
21 .map_err(|e| CodecError::Encode(e.to_string()))
22}
23
24pub fn from_json_bytes<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
31 serde_ipld_dagjson::from_slice(bytes).map_err(|e| CodecError::Decode(e.to_string()))
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37 use crate::id::NodeId;
38 use serde::{Deserialize, Serialize};
39
40 #[derive(Serialize, Deserialize, PartialEq, Debug)]
41 struct Fixture {
42 id: NodeId,
43 label: String,
44 }
45
46 #[test]
47 fn json_round_trip_restores_value() {
48 let original = Fixture {
49 id: NodeId::from_bytes_raw([3u8; 16]),
50 label: "debug".into(),
51 };
52 let bytes = to_json_bytes(&original).expect("encode");
53 let decoded: Fixture = from_json_bytes(&bytes).expect("decode");
54 assert_eq!(original, decoded);
55 }
56}