Releases: KillingSpark/zstd-rs
Compression support
Compression support
This release adds initial support for compressing data into the zstd format. This enables interoperability with workflows that require payloads to be encoded with zstd all in pure rust, no C dependencies needed.
API changes
The public API of the crate has been reorganized and cleaned up. Since there is now also encoding support the root couldn't really be used for structures used to decode data.
Errors
Decoding errors now live in their own module ruzstd::decoding::errors
. This enabled hiding a lot of the internal modules and by that decluttering the docs.
Decoders
The FrameDecoder
and StreamingDecoder
are now found in ruzstd::decoding
instead of the root of the namespace. This is because there is now the new ruzstd::encoding
module which contains the FrameCompressor
as well as the compress
/compress_to_vec
convenience functions.
Security update, unsoundness in RingBuffer
Issue #75 reported an usoundness bug in the RingBuffer that could result in unintented heap reads. This has been fixed in #76 by @paolobarbolini
Versions 0.7.0 up to and including 0.7.2 are affected
Also include #70 that adds convenience functions to decode all zstd frames in a given slice
We are std(-dependency)
Contains unsoundness fixed in 0.7.3
https://github.com/workingjubilee put the work in to make this crate usable as a dependency in the standard library in #67
Bugfix release
Contains unsoundness fixed in 0.7.3
https://github.com/michaelkirk noticed and fixed a bug related to the drain_to
family of functions where a write of 0 bytes means that the target is temporarily not able to receive more bytes which caused an endless loop before the fix
Optimizations, Documentation and slight API changes
Contains unsoundness fixed in 0.7.3
- Few slight performance optimizations
- Big documentation contribution
StreamingDecoder
now has API to get to the containedimpl Read
Send + Sync for FrameDecoder and optional checksum calculation
- The FrameDecoder is now Send + Sync (RingBuffer impls these traits now)
- Hashing content and checking the result against the frame header is now optional
Even better no_std
Switching from thiserror to derive_more allows for no_std builds on stable rust
No-std support and better dict API
This release features no-std support with big thanks to @antangelo!
Also the API for dictionaries has been revised, which required some breaking changes in that department
Support skippable frames and improve zstd binary
This support features support for
- Skippable frames, which where previously regarded as a generally malformed frame
- Decoding multiple frames in one file with the provided zstd binary (thanks @phord)
Optimizations and way better errors
- In a big effort, @paolobarbolini and me improved the performance of decoding sequences. This also lead to a cool contribution of him to the standard lib making vecdequeue for copyable types way more performant. #18
- I improved the reversed bitreader performance by a lot after reading the excellent blogposts here and here
- @rrbutani Made the effort of converting the not very helpful plain string errors with meaningful error enums, which apparently can help with binary sizes, but is also just a very big usability improvement of this library #28