pub trait CarReader {
// Required methods
fn header(&self) -> &CarHeader;
fn sections(&self) -> Vec<Section>;
fn read_section_data(&mut self, cid: &Cid) -> Result<Vec<u8>, CarError>;
fn ipld(&mut self, cid: &Cid) -> Result<Ipld, CarError>;
// Provided methods
fn unixfs(&mut self, cid: &Cid) -> Result<UnixFs, CarError> { ... }
fn search_file_cid_inner(
&mut self,
searchq: &mut VecDeque<Cid>,
f: &str
) -> Result<Cid, CarError> { ... }
fn search_file_cid(&mut self, f: &str) -> Result<Cid, CarError> { ... }
}
9
10
11
12
13
14
15
16
17
18
19
fn main() {
let file_name = std::env::args().nth(1).expect("use filename as argument");
let file = std::path::Path::new("test");
let file = file.join("carv1-basic.car");
let file = std::fs::File::open(file).unwrap();
let mut reader = reader::new_v1(file).unwrap();
let cid = reader
.search_file_cid(&file_name)
.expect("search file error.");
cat_ipld(&mut reader, cid).unwrap();
}