pub struct ZipFileBuilder { /* private fields */ }Expand description
Compresses the contents of a single file entry independently of any ZipWriter, so that
the CPU-intensive part of adding files to an archive can be parallelized.
The builder compresses the data written to it into memory as it arrives, while tracking the
metadata (CRC-32 and sizes) that the archive will need. Once ZipFileBuilder::finish has
been called, the resulting PreparedZipFile can be appended to an archive with
ZipWriter::add_prepared_file, which copies the already-compressed bytes without
recompressing them.
Builders are self-contained: they can be created, written to and finished on other threads
while a ZipWriter is in use, and the prepared files appended to the archive as they become
ready.
Encryption is not supported; pass options without encryption or creation will fail.
use std::io::{Cursor, Write};
use zip::ZipWriter;
use zip::write::{SimpleFileOptions, ZipFileBuilder};
let options = SimpleFileOptions::default();
// Compress each file on its own thread...
let handles = ["first.txt", "second.txt"].map(|name| {
std::thread::spawn(move || -> zip::result::ZipResult<_> {
let mut builder = ZipFileBuilder::new(name, options)?;
builder.write_all(b"Contents compressed off-thread")?;
builder.finish()
})
});
// ...then append them to the archive serially.
let mut zip = ZipWriter::new(Cursor::new(Vec::new()));
for handle in handles {
zip.add_prepared_file(handle.join().unwrap()?)?;
}
let zip_bytes = zip.finish()?.into_inner();Implementations§
Source§impl ZipFileBuilder
impl ZipFileBuilder
Sourcepub fn new<N: AsRef<str>, T: FileOptionExtension>(
name: N,
options: FileOptions<'_, '_, T>,
) -> ZipResult<Self>
pub fn new<N: AsRef<str>, T: FileOptionExtension>( name: N, options: FileOptions<'_, '_, T>, ) -> ZipResult<Self>
Creates a builder that compresses a file’s contents using the compression settings from
options.
Fails if options requests encryption or an unsupported compression method or level.
Sourcepub fn new_from_path<T: FileOptionExtension, P: AsRef<Path>>(
path: P,
options: FileOptions<'_, '_, T>,
) -> ZipResult<Self>
pub fn new_from_path<T: FileOptionExtension, P: AsRef<Path>>( path: P, options: FileOptions<'_, '_, T>, ) -> ZipResult<Self>
Like ZipFileBuilder::new, but takes a Path as the file name.
This function ensures that the ‘/’ path separator is used and normalizes . and ... It
ignores any .. or Windows drive letter that would produce a path outside the ZIP file’s
root.
Sourcepub fn finish(self) -> ZipResult<PreparedZipFile>
pub fn finish(self) -> ZipResult<PreparedZipFile>
Finishes compressing the file, and returns a PreparedZipFile that can be appended to
an archive with ZipWriter::add_prepared_file.
Trait Implementations§
Source§impl Debug for ZipFileBuilder
impl Debug for ZipFileBuilder
Source§impl Write for ZipFileBuilder
impl Write for ZipFileBuilder
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)