use bytes::Bytes;
use serde::{Serialize, de::DeserializeOwned};
use crate::error::CodecError;
pub fn to_json_bytes<T: Serialize>(value: &T) -> Result<Bytes, CodecError> {
serde_ipld_dagjson::to_vec(value)
.map(Bytes::from)
.map_err(|e| CodecError::Encode(e.to_string()))
}
pub fn from_json_bytes<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
serde_ipld_dagjson::from_slice(bytes).map_err(|e| CodecError::Decode(e.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
use crate::id::NodeId;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Fixture {
id: NodeId,
label: String,
}
#[test]
fn json_round_trip_restores_value() {
let original = Fixture {
id: NodeId::from_bytes_raw([3u8; 16]),
label: "debug".into(),
};
let bytes = to_json_bytes(&original).expect("encode");
let decoded: Fixture = from_json_bytes(&bytes).expect("decode");
assert_eq!(original, decoded);
}
}