pub struct SplitStreamReader<R: Read, ObjectID: FsVerityHashValue> {
decoder: Decoder<'static, BufReader<R>>,
pub refs: DigestMap<ObjectID>,
inline_bytes: usize,
}Expand description
Reader for parsing split stream format files with inline content and external object references.
Fields§
§decoder: Decoder<'static, BufReader<R>>§refs: DigestMap<ObjectID>Digest map containing content hash to object ID mappings
inline_bytes: usizeImplementations§
Source§impl<R: Read, ObjectID: FsVerityHashValue> SplitStreamReader<R, ObjectID>
impl<R: Read, ObjectID: FsVerityHashValue> SplitStreamReader<R, ObjectID>
Sourcepub fn new(reader: R) -> Result<Self>
pub fn new(reader: R) -> Result<Self>
Creates a new split stream reader from the provided reader.
Reads the digest map header from the stream during initialization.
fn ensure_chunk( &mut self, eof_ok: bool, ext_ok: bool, expected_bytes: usize, ) -> Result<ChunkType<ObjectID>>
Sourcepub fn read_inline_exact(&mut self, buffer: &mut [u8]) -> Result<bool>
pub fn read_inline_exact(&mut self, buffer: &mut [u8]) -> Result<bool>
Reads the exact number of inline bytes Assumes that the data cannot be split across chunks
fn discard_padding(&mut self, size: usize) -> Result<()>
Sourcepub fn read_exact(
&mut self,
actual_size: usize,
stored_size: usize,
) -> Result<SplitStreamData<ObjectID>>
pub fn read_exact( &mut self, actual_size: usize, stored_size: usize, ) -> Result<SplitStreamData<ObjectID>>
Reads an exact amount of data, which may be inline or external.
The stored_size is the size as recorded in the stream (including any padding), while actual_size is the actual content size without padding. Returns either inline content or an external object reference.
Sourcepub fn cat(
&mut self,
output: &mut impl Write,
load_data: impl FnMut(&ObjectID) -> Result<Vec<u8>>,
) -> Result<()>
pub fn cat( &mut self, output: &mut impl Write, load_data: impl FnMut(&ObjectID) -> Result<Vec<u8>>, ) -> Result<()>
Concatenates the entire split stream content to the output writer.
Inline content is written directly, while external references are resolved using the provided load_data callback function.
Sourcepub fn get_object_refs(&mut self, callback: impl FnMut(&ObjectID)) -> Result<()>
pub fn get_object_refs(&mut self, callback: impl FnMut(&ObjectID)) -> Result<()>
Traverses the split stream and calls the callback for each object reference.
This includes both references from the digest map and external references in the stream.
Sourcepub fn get_stream_refs(&mut self, callback: impl FnMut(&Sha256Digest))
pub fn get_stream_refs(&mut self, callback: impl FnMut(&Sha256Digest))
Calls the callback for each content hash in the digest map.
Sourcepub fn lookup(&self, body: &Sha256Digest) -> Result<&ObjectID>
pub fn lookup(&self, body: &Sha256Digest) -> Result<&ObjectID>
Looks up an object ID by content hash in the digest map.
Returns an error if the reference is not found.
Trait Implementations§
Source§impl<R: Read, ObjectID: FsVerityHashValue> Debug for SplitStreamReader<R, ObjectID>
impl<R: Read, ObjectID: FsVerityHashValue> Debug for SplitStreamReader<R, ObjectID>
Source§impl<F: Read, ObjectID: FsVerityHashValue> Read for SplitStreamReader<F, ObjectID>
impl<F: Read, ObjectID: FsVerityHashValue> Read for SplitStreamReader<F, ObjectID>
Source§fn read(&mut self, data: &mut [u8]) -> Result<usize>
fn read(&mut self, data: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read. Read more