1 unstable release
0.3.0 | Oct 7, 2024 |
---|---|
0.2.0 |
|
#171 in Compression
125KB
3K
SLoC
Zippity
Library for asynchronously creating a ZIP file on the fly.
Features
- Async, using tokio.
- ZIP is created on the fly, can be directly streamed somewhere, does not need to be stored in RAM or on disk
- Supports Zip64 (files > 4GB).
- File size is known in advance
- Output is driven from outside (implements
[tokio::io::AsyncRead]
) - Allows seeking in the file (implements
[tokio::io::AsyncSeek]
) - Supports files on the filesystem as entries.
- Supports tokio_uring
- Supports integration with Actix Web (see
[Reader::into_responder()]
) - Entry metadata
Non-features
These are not planned to be implemented.
- Compression: The zip only uses store method.
- Encryption
- Zip reading
Example
use std::io::SeekFrom;
use tokio::io::{AsyncSeekExt, AsyncWriteExt, copy, sink};
tokio_test::block_on(async {
// Create the builder
let mut builder = zippity::Builder::<&[u8]>::new();
// Add data
builder.add_entry("Entry name".to_owned(), b"Entry data".as_slice()).await.unwrap();
// Build the reader object
// Note that this does not touch the data yet.
let mut zippity = builder.build();
// Getting file size is in O(1)
println!("Total zip file size will be {}B", zippity.size());
// Seek to last 10B
zippity.seek(SeekFrom::End(-10)).await.unwrap();
// Write to output (in this case a sink, throwing it away)
copy(&mut zippity, &mut sink()).await.unwrap();
})
Current state
Consider this a beta version. The library is mostly finished, with lot of polish missing for version 1.0.0.
Crate features
Name | Description | Default |
---|---|---|
tokio-file |
Adds support for TokioFileEntry being used as a entry data through Tokio file. |
yes |
bytes |
Implement EntryData for bytes::Bytes , and provide method into_bytes_stream() for Reader . |
no |
actix-web |
Addsactix_web::Reponder implementation to zippity::Reader |
no |
proptest |
Add module zippity::proptest , with strategies, and proptest::arbitrary::Arbitrary implementation for Reader . |
no |
Dependencies
~4–15MB
~203K SLoC