1use cid::Cid;
2use rust_car::{
3 error::CarError,
4 reader::{self, CarReader},
5 unixfs::UnixFs,
6 utils::cat_ipld,
7};
8
9fn main() {
13 let cid = "bafkreiaqv66m5nd6mwgkk7h5lwqnjzj54s4f7knmnrjhb7ylzqfg2vdo54";
15 let file = std::path::Path::new("test");
16 let file = file.join("carv1-basic.car");
17 let file = std::fs::File::open(file).unwrap();
18 let mut reader = reader::new_v1(file).unwrap();
19 let roots = reader.header().roots();
20 let file_cid = Cid::try_from(cid).expect("cid format error");
21 for r in roots.iter() {
22 let root_ipld = reader.ipld(r).unwrap();
23 let root: Result<UnixFs, CarError> = root_ipld.try_into();
24 let root_dir = root.unwrap();
25 let count = root_dir
26 .links()
27 .iter()
28 .filter(|u| u.hash() == file_cid)
29 .count();
30 if count > 0 {
31 cat_ipld(&mut reader, file_cid).unwrap();
32 }
33 }
34}