Struct Decoder

Source
pub struct Decoder<'a, S> { /* private fields */ }
Expand description

Decompresses data from a seekable source.

A decoder reads compressed data from a seekable source.

Implementations§

Source§

impl<'a, S: Seekable> Decoder<'a, S>

Source

pub fn new(src: S) -> Result<Self>

Creates a new Decoder with default parameters and src as source.

This is equivalent to calling DecodeOptions::new(src).into_decoder().

§Errors

Fails if the decoder could not created.

Source

pub fn with_opts(opts: DecodeOptions<'a, S>) -> Result<Self>

Creates a new Decoder with the given DecodeOptions.

§Errors

Fails if the decoder could not be created.

Source

pub fn decompress_with_prefix<'b: 'a>( &mut self, buf: &mut [u8], prefix: Option<&'b [u8]>, ) -> Result<usize>

Decompresses data from the internal source.

Call this repetetively to fill buf with decompressed data. Returns the number of bytes written to buf.

If a prefix is passed, it will be re-applied to every frame, as tables are discarded at end of frame. Referencing a raw content prefix has almost no cpu nor memory cost.

§Errors

If decompression fails or any parameter is invalid.

Source§

impl<S: Seekable> Decoder<'_, S>

Source

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

Decompresses data from the internal source.

Call this repetetively to fill buf with decompressed data. Returns the number of bytes written to buf.

§Errors

If decompression fails or any parameter is invalid.

Source

pub fn reset(&mut self)

Resets the current decompresion status.

This resets the internal decompression context as well as decompression offset and limit. The next decompression after this function will start from the beginning of the seekable source.

Source

pub fn set_lower_frame(&mut self, index: u32) -> Result<u64>

Sets the decompression offset to the beginning of the frame at index.

This has the same effect as calling Self::set_offset with the decompressed start position of the frame at index.

§Errors

When the the passed frame index is out of range.

Source

pub fn set_upper_frame(&mut self, index: u32) -> Result<u64>

Sets the limit for the decompression offset to the end of the frame at index.

This has the same effect as calling Self::set_offset_limit with the decompressed end position of the frame at index. The current decompression state will not be reset, it is possible to change the upper frame in the middle of a decompression operation.

§Errors

When the the passed frame index is out of range.

Source

pub fn set_offset(&mut self, offset: u64) -> Result<()>

Sets the decompression offset.

The offset is the position in the decompressed data of the seekable source from which decompression starts. If possible, the decoder will continue decompression from the current internal state.

Note: If the passed offset is not the beginning of a frame, the decoder will perform a dummy decompression from the beginning of the frame up to the offset position.

§Errors

When the passed offset is out of range.

Source

pub fn set_offset_limit(&mut self, limit: u64) -> Result<()>

Sets a limit for the decompression offset.

The limit is the position in the decompressed data of the seekable source at which decompresion stops. This does not reset the current decompression state, the limit can be changed in the middle of a decompression operation without interrupting an ongoing decompression operation. It is possible to set a limit that is lower than the applied offset. However, it will lead to any decompression operation making no progress, i.e. it will produce zero decompressed bytes.

Note: The decoder will immediately stop decompression at the specified limit. The frame checksum of the last decompressed frame will not be verified, if the limit isn’t at the end of a frame.

§Errors

When the passed limit is out of range.

Source

pub fn read_compressed(&self) -> u64

Gets the total number of compressed bytes read since the last reset.

Source

pub fn seek_table(&self) -> &SeekTable

Gets a reference to the internal SeekTable.

Source

pub fn offset(&self) -> u64

Gets the current offset of this decoder.

Source

pub fn offset_limit(&self) -> u64

Gets the offset limit of this decoder.

Trait Implementations§

Source§

impl<S: Seekable> Read for Decoder<'_, S>

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” adaptor 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
Source§

impl<S: Seekable> Seek for Decoder<'_, S>

Source§

fn seek(&mut self, pos: SeekFrom) -> Result<u64>

Seek to an offset, in bytes, in a stream. Read more
1.55.0 · Source§

fn rewind(&mut self) -> Result<(), Error>

Rewind to the beginning of a stream. Read more
Source§

fn stream_len(&mut self) -> Result<u64, Error>

🔬This is a nightly-only experimental API. (seek_stream_len)
Returns the length of this stream (in bytes). Read more
1.51.0 · Source§

fn stream_position(&mut self) -> Result<u64, Error>

Returns the current seek position from the start of the stream. Read more
1.80.0 · Source§

fn seek_relative(&mut self, offset: i64) -> Result<(), Error>

Seeks relative to the current position. Read more

Auto Trait Implementations§

§

impl<'a, S> Freeze for Decoder<'a, S>
where S: Freeze,

§

impl<'a, S> RefUnwindSafe for Decoder<'a, S>
where S: RefUnwindSafe,

§

impl<'a, S> Send for Decoder<'a, S>
where S: Send,

§

impl<'a, S> Sync for Decoder<'a, S>
where S: Sync,

§

impl<'a, S> Unpin for Decoder<'a, S>
where S: Unpin,

§

impl<'a, S> UnwindSafe for Decoder<'a, S>
where S: UnwindSafe,

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> Seekable for T
where T: Read + Seek,

Source§

fn set_offset(&mut self, offset: u64) -> Result<(), Error>

Sets the read offset from the start of the seekable. Read more
Source§

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

Pull some bytes from this source into buf, returning how many bytes were read. Read more
Returns the footer of this seekable. Read more
Source§

fn seek_to_seek_table_start( &mut self, seek_table_size: usize, ) -> Result<(), Error>

Seeks to the start of the seek table. Read more
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.