Skip to content
8 changes: 8 additions & 0 deletions crates/async-compression/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ all-algorithms = [
"xz-parallel",
"zlib",
"zstd",
"snappy",
]

# algorithms
Expand All @@ -46,6 +47,7 @@ xz2 = ["compression-codecs/xz2", "xz"]
zlib = ["compression-codecs/zlib"]
zstd = ["compression-codecs/zstd"]
zstdmt = ["compression-codecs/zstdmt", "zstd"]
snappy = ["compression-codecs/snappy"]


[dependencies]
Expand All @@ -72,6 +74,7 @@ tokio = { version = "1.38.2", default-features = false, features = [
"macros",
"rt-multi-thread",
"io-std",
"fs"
] }
tokio-util = { version = "0.7", default-features = false, features = ["io"] }

Expand All @@ -83,6 +86,7 @@ lz4 = "1.28.1"
liblzma = "0.4.2"
zstd-safe = { version = "7", default-features = false }
deflate64 = "0.1.5"
snap = "1"

[lints]
workspace = true
Expand Down Expand Up @@ -131,6 +135,10 @@ required-features = ["zstd", "tokio"]
name = "zstd-window-size"
required-features = ["zstd", "tokio"]

[[test]]
name = "snappy"
required-features = ["snappy"]

[[example]]
name = "zlib_tokio_write"
required-features = ["zlib", "tokio"]
Expand Down
14 changes: 14 additions & 0 deletions crates/async-compression/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,5 +375,19 @@ macro_rules! algos {
{ @dec }
);

algos!(@algo snappy ["snappy"] SnappyDecoder SnappyEncoder <$inner>
{ @enc

pub fn with_quality(inner: $inner, _level: crate::core::Level) -> Self {
Self {
inner: crate::$($mod::)+generic::Encoder::new(
inner,
crate::codecs::SnappyEncoder::new()
),
}
}
}
{ @dec }
);
}
}
3 changes: 3 additions & 0 deletions crates/async-compression/tests/proptest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,7 @@ mod proptest {

#[cfg(feature = "zstd")]
tests!(zstd);

#[cfg(feature = "snappy")]
tests!(snappy);
}
4 changes: 4 additions & 0 deletions crates/async-compression/tests/snappy.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#[macro_use]
mod utils;

test_cases!(snappy);
27 changes: 27 additions & 0 deletions crates/async-compression/tests/utils/algos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,33 @@ algos! {
}
}
}

pub mod snappy("snappy", SnappyEncoder, SnappyDecoder) {
pub mod sync {
pub use crate::utils::impls::sync::to_vec;

pub fn compress(bytes: &[u8]) -> Vec<u8> {
if bytes.is_empty() {
return vec![0xff, 0x06, 0x00, 0x00, b's', b'N', b'a', b'P', b'p', b'Y'];
}

use std::io::Write;
use snap::write::FrameEncoder;

let mut output = Vec::new();
{
let mut encoder = FrameEncoder::new(&mut output);
encoder.write_all(bytes).unwrap();
}
output
}

pub fn decompress(bytes: &[u8]) -> Vec<u8> {
use snap::read::FrameDecoder;
to_vec(FrameDecoder::new(bytes))
}
}
}
}

macro_rules! io_algo_parallel {
Expand Down
1 change: 1 addition & 0 deletions crates/async-compression/tests/utils/test_cases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ macro_rules! io_test_cases {

#[test]
#[ntest::timeout(1000)]
#[cfg(not(feature = "snappy"))]
fn trailer() {
let mut compressed = sync::compress(&[1, 2, 3, 4, 5, 6]);

Expand Down
4 changes: 4 additions & 0 deletions crates/compression-codecs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ all-algorithms = [
"zlib",
"zstd",
"deflate64",
"snappy"
]

# algorithms
Expand All @@ -42,6 +43,7 @@ zlib = ["flate2"]
zstd = ["libzstd", "zstd-safe"]
zstdmt = ["zstd", "zstd-safe/zstdmt"]
deflate64 = ["dep:deflate64"]
snappy = ["snap", "crc32c"]

[dependencies]
# Workspace dependencies.
Expand All @@ -56,6 +58,8 @@ lz4 = { version = "1.28.1", optional = true }
liblzma = { version = "0.4.5", optional = true }
memchr = { version = "2", optional = true }
zstd-safe = { version = "7", optional = true, default-features = false }
snap = { version = "1", optional = true, default-features = false }
crc32c = { version = "0.6.8", optional = true, default-features = false }

[lints]
workspace = true
4 changes: 4 additions & 0 deletions crates/compression-codecs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ pub mod gzip;
pub mod lz4;
#[cfg(feature = "lzma")]
pub mod lzma;
#[cfg(feature = "snappy")]
pub mod snappy;
#[cfg(feature = "xz")]
pub mod xz;
#[cfg(feature = "lzma")]
Expand Down Expand Up @@ -49,6 +51,8 @@ pub use self::gzip::{GzipDecoder, GzipEncoder};
pub use self::lz4::{Lz4Decoder, Lz4Encoder};
#[cfg(feature = "lzma")]
pub use self::lzma::{LzmaDecoder, LzmaEncoder};
#[cfg(feature = "snappy")]
pub use self::snappy::{SnappyDecoder, SnappyEncoder};
#[cfg(feature = "xz")]
pub use self::xz::{XzDecoder, XzEncoder};
#[cfg(feature = "lzma")]
Expand Down
Loading
Loading