pub struct Compressor<W: Write + Seek> { /* private fields */ }Expand description
Stateful compressor that maintains compression state across multiple writes
Compressor implements Write and compresses data incrementally as it’s
written. This is useful for compressing large data streams or data
that’s generated dynamically without knowing the total size in advance.
§Examples
use mismall::stream::Compressor;
use std::fs::File;
use std::io::Write;
let output_file = File::create("compressed.small")?;
let mut compressor = Compressor::new(output_file, "data.txt", None);
compressor.write_all(b"Hello, ")?;
compressor.write_all(b"world!")?;
compressor.finish()?; // Important: call finish() to complete compression
println!("Data compressed successfully!");Implementations§
Source§impl<W: Write + Seek> Compressor<W>
impl<W: Write + Seek> Compressor<W>
Sourcepub fn new(destination: W, filename: &str, password: Option<&str>) -> Self
pub fn new(destination: W, filename: &str, password: Option<&str>) -> Self
Create a new compressor
§Arguments
destination- Destination stream for compressed datafilename- Original filename (stored in metadata)password- Optional password for encryption
§Example
use mismall::stream::Compressor;
use std::fs::File;
let file = File::create("output.small")?;
let compressor = Compressor::new(file, "data.txt", None);Sourcepub fn with_chunk_size(self, chunk_size: usize) -> Self
pub fn with_chunk_size(self, chunk_size: usize) -> Self
Set custom chunk size for compression
Larger chunk sizes use more memory but may improve performance. Smaller chunk sizes use less memory but may be slower.
§Arguments
chunk_size- Chunk size in bytes (64KB to 1GB)
§Example
use mismall::stream::Compressor;
use std::fs::File;
let output = File::create("data.txt.small")?;
let compressor = Compressor::new(output, "data.txt", None)
.with_chunk_size(64 * 1024 * 1024); // 64MBSourcepub fn with_progress_callback<F>(self, callback: F) -> Self
pub fn with_progress_callback<F>(self, callback: F) -> Self
Set progress callback for real-time updates
The callback will be called periodically with progress information during the compression process.
§Arguments
callback- Function that receivesProgressInfo
§Example
use mismall::stream::Compressor;
use std::fs::File;
let output = File::create("data.txt.small")?;
let compressor = Compressor::new(output, "data.txt", None)
.with_progress_callback(|progress: &mismall::progress::ProgressInfo| {
println!("Progress: {}%", progress.percentage);
});Sourcepub fn bytes_written(&self) -> u64
pub fn bytes_written(&self) -> u64
Get the total bytes written so far
§Returns
Number of bytes written to the destination
§Example
use mismall::stream::Compressor;
use std::fs::File;
use std::io::Write;
let output = File::create("data.txt.small")?;
let mut compressor = Compressor::new(output, "data.txt", None);
compressor.write_all(b"Hello")?;
println!("Written {} bytes", compressor.bytes_written());Sourcepub fn is_finished(&self) -> bool
pub fn is_finished(&self) -> bool
Sourcepub fn finish(&mut self) -> Result<()>
pub fn finish(&mut self) -> Result<()>
Complete the compression process
This method must be called after all data has been written
to finalize the compression and write proper headers/footers.
After calling finish(), no more data can be written.
§Returns
Result<()> on success or Err(MismallError) on failure
§Example
use mismall::stream::Compressor;
use std::fs::File;
use std::io::Write;
let output = File::create("data.txt.small")?;
let mut compressor = Compressor::new(output, "data.txt", None);
compressor.write_all(b"Hello, world!")?;
compressor.finish()?; // Finalize compressionTrait Implementations§
Source§impl<W: Write + Seek> Write for Compressor<W>
impl<W: Write + Seek> Write for Compressor<W>
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored)