use std::{collections::BTreeMap, iter}; use ipld_core::{ cid::Cid, codec::{Codec, Links}, ipld, ipld::Ipld, }; use ipld_dagpb::{DagPbCodec, PbNode}; fn gen_ipld_node() -> Ipld { let cid = Cid::try_from("bafkreie74tgmnxqwojhtumgh5dzfj46gi4mynlfr7dmm7duwzyvnpw7h7m").unwrap(); let pb_link = ipld!({ "Hash": cid, "Name": "block", "Tsize": 13, }); let links: Vec = vec![pb_link.clone(), pb_link]; let mut pb_node = BTreeMap::::new(); pb_node.insert("Data".to_string(), b"Here is some data\n".to_vec().into()); pb_node.insert("Links".to_string(), links.into()); pb_node.into() } #[test] fn test_codec_ipld_encode_decode() { let ipld = gen_ipld_node(); let bytes = DagPbCodec::encode_to_vec(&ipld).unwrap(); let ipld2 = DagPbCodec::decode_from_slice(&bytes).unwrap(); assert_eq!(ipld, ipld2); } #[test] fn test_codec_pbnode_encode_decode() { let ipld = gen_ipld_node(); let bytes = DagPbCodec::encode_to_vec(&ipld).unwrap(); let pb_node: PbNode = DagPbCodec::decode_from_slice(&bytes).unwrap(); let bytes2 = DagPbCodec::encode_to_vec(&pb_node).unwrap(); assert_eq!(bytes, bytes2); } #[test] fn test_codec_links() { let ipld = gen_ipld_node(); let bytes = DagPbCodec::encode_to_vec(&ipld).unwrap(); let links = DagPbCodec::links(&bytes).unwrap().collect::>(); let cid = Cid::try_from("bafkreie74tgmnxqwojhtumgh5dzfj46gi4mynlfr7dmm7duwzyvnpw7h7m").unwrap(); let expected = iter::repeat(cid).take(2).collect::>(); assert_eq!(links, expected); }