ZranGenerator

Struct ZranGenerator 

Source
pub struct ZranGenerator<R> { /* private fields */ }
Expand description

Struct to generate random access information for OCIv1 image tarballs.

ZranGenerator generates decompression context information to support random access to the tarball later. It only tracks information related to Tar file content, and ignores all other tar headers and zlib headers when possible. The work flow is:

  1. create a ZranGenerator object zran.
  2. create a tar::Archive object from zran.
  3. walk all entries in the tarball, for each tar regular file: 3.1) get file size and split it into chunks, for each file data chunk 3.2) call zran.begin_data_chunk() 3.3) read file content from the tar Entry object 3.4) call zran.end_data_chunk() to get chunk decompression information
  4. call zran.get_compression_info_array() to get all decompression context information for random access later

Implementations§

Source§

impl<R: Read> ZranGenerator<R>

Source

pub fn new(reader: ZranReader<R>) -> Self

Create a new instance of ZranGenerator from a reader.

Source

pub fn begin_read(&mut self, chunk_size: u64) -> Result<u32>

Begin a transaction to read data from the zlib stream.

§Arguments
  • chunk_size: size of data to be read from the zlib stream.
Source

pub fn end_read(&mut self) -> Result<ZranChunkInfo>

Mark end of a data read operation and returns information to decode data from the random access slice.

Source

pub fn get_compression_ctx_array(&self) -> &[ZranContext]

Get an immutable reference to the random access context information array.

Source

pub fn set_min_compressed_size(&mut self, sz: u64)

Set minimal compressed size to emit an random access slice.

Please ensure “min_compressed_size * 2 <= max_compressed_size”.

Source

pub fn set_max_compressed_size(&mut self, sz: u64)

Set maximum compressed size to emit an random access slice.

Please ensure “min_compressed_size * 2 <= max_compressed_size”.

Source

pub fn set_max_uncompressed_size(&mut self, sz: u64)

Set maximum uncompressed size to emit an random access slice.

Please ensure “min_compressed_size * 2 < max_compressed_size”.

Trait Implementations§

Source§

impl<R: Read> Read for ZranGenerator<R>

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more

Auto Trait Implementations§

§

impl<R> Freeze for ZranGenerator<R>

§

impl<R> RefUnwindSafe for ZranGenerator<R>

§

impl<R> !Send for ZranGenerator<R>

§

impl<R> !Sync for ZranGenerator<R>

§

impl<R> Unpin for ZranGenerator<R>

§

impl<R> UnwindSafe for ZranGenerator<R>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.