pub struct SplitStreamReader<ObjectID: FsVerityHashValue> {
decoder: Decoder<'static, BufReader<Take<File>>>,
inline_bytes: usize,
pub content_type: u64,
pub total_size: u64,
object_refs: Vec<ObjectID>,
named_refs: HashMap<Box<str>, ObjectID>,
}Expand description
Reader for parsing split stream format files with inline content and external object references.
Fields§
§decoder: Decoder<'static, BufReader<Take<File>>>§inline_bytes: usize§content_type: u64The content_type ID given when the splitstream was constructed
total_size: u64The total size of the original/merged stream, in bytes
object_refs: Vec<ObjectID>§named_refs: HashMap<Box<str>, ObjectID>Implementations§
Source§impl<ObjectID: FsVerityHashValue> SplitStreamReader<ObjectID>
impl<ObjectID: FsVerityHashValue> SplitStreamReader<ObjectID>
Sourcepub fn new(file: File, expected_content_type: Option<u64>) -> Result<Self>
pub fn new(file: File, expected_content_type: Option<u64>) -> Result<Self>
Creates a new split stream reader from the provided reader.
Reads the digest map header from the stream during initialization.
fn read_named_references<ObjectId: FsVerityHashValue>( section: &[u8], references: &[ObjectId], ) -> Result<HashMap<Box<str>, ObjectId>>
Sourcepub fn iter_named_refs(&self) -> impl Iterator<Item = (&str, &ObjectID)>
pub fn iter_named_refs(&self) -> impl Iterator<Item = (&str, &ObjectID)>
Iterate the list of named references defined on this split stream.
Sourcepub fn into_named_refs(self) -> HashMap<Box<str>, ObjectID>
pub fn into_named_refs(self) -> HashMap<Box<str>, ObjectID>
Steal the “named refs” table from this splitstream, destructing it in the process.
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,
repo: &Repository<ObjectID>,
output: &mut impl Write,
) -> Result<()>
pub fn cat( &mut self, repo: &Repository<ObjectID>, output: &mut impl Write, ) -> 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 lookup_named_ref(&self, name: &str) -> Option<&ObjectID>
pub fn lookup_named_ref(&self, name: &str) -> Option<&ObjectID>
Looks up a named reference
Returns None if no such reference exists
Trait Implementations§
Source§impl<ObjectID: FsVerityHashValue> Debug for SplitStreamReader<ObjectID>
impl<ObjectID: FsVerityHashValue> Debug for SplitStreamReader<ObjectID>
Source§impl<ObjectID: FsVerityHashValue> Read for SplitStreamReader<ObjectID>
impl<ObjectID: FsVerityHashValue> Read for SplitStreamReader<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