pub struct CarReader<R: Read> { /* private fields */ }Expand description
Read blocks from CAR format.
CAR files are read sequentially, yielding blocks one at a time.
Implementations§
Source§impl<R: Read> CarReader<R>
impl<R: Read> CarReader<R>
Sourcepub fn new(reader: R) -> Result<Self>
pub fn new(reader: R) -> Result<Self>
Create a new CAR reader.
This reads and parses the CAR header immediately.
§Arguments
reader- The reader to read CAR data from
§Examples
use ipfrs_core::{Block, car::{CarWriter, CarReader}};
use bytes::Bytes;
let block = Block::new(Bytes::from_static(b"test")).unwrap();
let mut data = Vec::new();
let mut writer = CarWriter::new(&mut data, vec![*block.cid()]).unwrap();
writer.write_block(&block).unwrap();
writer.finish().unwrap();
let reader = CarReader::new(&data[..]).unwrap();
assert_eq!(reader.roots().len(), 1);Sourcepub fn read_block(&mut self) -> Result<Option<Block>>
pub fn read_block(&mut self) -> Result<Option<Block>>
Read the next block from the CAR file.
Returns None when there are no more blocks.
Automatically decompresses blocks if they were compressed during writing.
§Examples
use ipfrs_core::{Block, car::{CarWriter, CarReader}};
use bytes::Bytes;
let block = Block::new(Bytes::from_static(b"data")).unwrap();
let mut data = Vec::new();
let mut writer = CarWriter::new(&mut data, vec![*block.cid()]).unwrap();
writer.write_block(&block).unwrap();
writer.finish().unwrap();
let mut reader = CarReader::new(&data[..]).unwrap();
let read_block = reader.read_block().unwrap().unwrap();
assert_eq!(read_block.cid(), block.cid());Sourcepub fn read_all_blocks(&mut self) -> Result<Vec<Block>>
pub fn read_all_blocks(&mut self) -> Result<Vec<Block>>
Read all blocks from the CAR file.
§Examples
use ipfrs_core::{Block, car::{CarWriter, CarReader}};
use bytes::Bytes;
let block1 = Block::new(Bytes::from_static(b"data1")).unwrap();
let block2 = Block::new(Bytes::from_static(b"data2")).unwrap();
let mut data = Vec::new();
let mut writer = CarWriter::new(&mut data, vec![*block1.cid()]).unwrap();
writer.write_block(&block1).unwrap();
writer.write_block(&block2).unwrap();
writer.finish().unwrap();
let mut reader = CarReader::new(&data[..]).unwrap();
let blocks = reader.read_all_blocks().unwrap();
assert_eq!(blocks.len(), 2);Auto Trait Implementations§
impl<R> Freeze for CarReader<R>where
R: Freeze,
impl<R> RefUnwindSafe for CarReader<R>where
R: RefUnwindSafe,
impl<R> Send for CarReader<R>where
R: Send,
impl<R> Sync for CarReader<R>where
R: Sync,
impl<R> Unpin for CarReader<R>where
R: Unpin,
impl<R> UnwindSafe for CarReader<R>where
R: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more