Skip to main content

FrameCompressor

Struct FrameCompressor 

Source
pub struct FrameCompressor<R: Read, W: Write, M: Matcher> { /* private fields */ }
Expand description

An interface for compressing arbitrary data with the ZStandard compression algorithm.

FrameCompressor will generally be used by:

  1. Initializing a compressor by providing a buffer of data using FrameCompressor::new()
  2. Starting compression and writing that compression into a vec using FrameCompressor::begin

§Examples

use structured_zstd::encoding::{FrameCompressor, CompressionLevel};
let mock_data: &[_] = &[0x1, 0x2, 0x3, 0x4];
let mut output = std::vec::Vec::new();
// Initialize a compressor.
let mut compressor = FrameCompressor::new(CompressionLevel::Uncompressed);
compressor.set_source(mock_data);
compressor.set_drain(&mut output);

// `compress` writes the compressed output into the provided buffer.
compressor.compress();

Implementations§

Source§

impl<R: Read, W: Write> FrameCompressor<R, W, MatchGeneratorDriver>

Source

pub fn new(compression_level: CompressionLevel) -> Self

Create a new FrameCompressor

Source§

impl<R: Read, W: Write, M: Matcher> FrameCompressor<R, W, M>

Source

pub fn new_with_matcher(matcher: M, compression_level: CompressionLevel) -> Self

Create a new FrameCompressor with a custom matching algorithm implementation

Source

pub fn set_source(&mut self, uncompressed_data: R) -> Option<R>

Before calling FrameCompressor::compress you need to set the source.

This is the data that is compressed and written into the drain.

Source

pub fn set_drain(&mut self, compressed_data: W) -> Option<W>

Before calling FrameCompressor::compress you need to set the drain.

As the compressor compresses data, the drain serves as a place for the output to be writte.

Source

pub fn set_source_size_hint(&mut self, size: u64)

Provide a hint about the total uncompressed size for the next frame.

When set, the encoder selects smaller hash tables and windows for small inputs, matching the C zstd source-size-class behavior.

This hint applies only to frame payload bytes (size). Dictionary history is primed separately and does not inflate the hinted size or advertised frame window. Must be called before compress.

Source

pub fn compress(&mut self)

Compress the uncompressed data from the provided source as one Zstd frame and write it to the provided drain

This will repeatedly call Read::read on the source to fill up blocks until the source returns 0 on the read call. All compressed blocks are buffered in memory so that the frame header can include the Frame_Content_Size field (which requires knowing the total uncompressed size). The entire frame — header, blocks, and optional checksum — is then written to the drain at the end. This means peak memory usage is O(compressed_size).

To avoid endlessly encoding from a potentially endless source (like a network socket) you can use the Read::take function

Source

pub fn source_mut(&mut self) -> Option<&mut R>

Get a mutable reference to the source

Source

pub fn drain_mut(&mut self) -> Option<&mut W>

Get a mutable reference to the drain

Source

pub fn source(&self) -> Option<&R>

Get a reference to the source

Source

pub fn drain(&self) -> Option<&W>

Get a reference to the drain

Source

pub fn take_source(&mut self) -> Option<R>

Retrieve the source

Source

pub fn take_drain(&mut self) -> Option<W>

Retrieve the drain

Source

pub fn replace_matcher(&mut self, match_generator: M) -> M

Before calling FrameCompressor::compress you can replace the matcher

Source

pub fn set_compression_level( &mut self, compression_level: CompressionLevel, ) -> CompressionLevel

Before calling FrameCompressor::compress you can replace the compression level

Source

pub fn compression_level(&self) -> CompressionLevel

Get the current compression level

Source

pub fn set_dictionary( &mut self, dictionary: Dictionary, ) -> Result<Option<Dictionary>, DictionaryDecodeError>

Attach a pre-parsed dictionary to be used for subsequent compressions.

In compressed modes, the dictionary id is written only when the active matcher supports dictionary priming. Uncompressed mode and non-priming matchers ignore the attached dictionary at encode time.

Source

pub fn set_dictionary_from_bytes( &mut self, raw_dictionary: &[u8], ) -> Result<Option<Dictionary>, DictionaryDecodeError>

Parse and attach a serialized dictionary blob.

Source

pub fn clear_dictionary(&mut self) -> Option<Dictionary>

Remove the attached dictionary.

Auto Trait Implementations§

§

impl<R, W, M> Freeze for FrameCompressor<R, W, M>
where R: Freeze, W: Freeze, M: Freeze,

§

impl<R, W, M> RefUnwindSafe for FrameCompressor<R, W, M>

§

impl<R, W, M> Send for FrameCompressor<R, W, M>
where R: Send, W: Send, M: Send,

§

impl<R, W, M> Sync for FrameCompressor<R, W, M>
where R: Sync, W: Sync, M: Sync,

§

impl<R, W, M> Unpin for FrameCompressor<R, W, M>
where R: Unpin, W: Unpin, M: Unpin,

§

impl<R, W, M> UnsafeUnpin for FrameCompressor<R, W, M>

§

impl<R, W, M> UnwindSafe for FrameCompressor<R, W, M>
where R: UnwindSafe, W: UnwindSafe, M: 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, 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.