pub async fn zstd_compress(data: &[u8]) -> Result<Vec<u8>>Expand description
Compresses a block of data using the zstd algorithm in asynchronous chunks, yielding in between each one.
Chunks are sized to fit within zstd’s default internal buffer size.
use std::io::{repeat, Read};
use rebuilderd_common::utils::{zstd_compress, zstd_decompress, ZSTD_CHUNK_SIZE};
tokio_test::block_on(async {
let undersized_data = "a".repeat(ZSTD_CHUNK_SIZE - 1).into_bytes();
let evenly_sized_data = "a".repeat(ZSTD_CHUNK_SIZE).into_bytes();
let oversized_data = "a".repeat(ZSTD_CHUNK_SIZE + 1).into_bytes();
let compressed = zstd_compress(&undersized_data).await.unwrap();
let decompressed = zstd_decompress(&compressed).await.unwrap();
assert_eq!(decompressed, undersized_data, "undersized data did not survive round-trip");
let compressed = zstd_compress(&evenly_sized_data).await.unwrap();
let decompressed = zstd_decompress(&compressed).await.unwrap();
assert_eq!(decompressed, evenly_sized_data, "evenly sized data did not survive round-trip");
let compressed = zstd_compress(&oversized_data).await.unwrap();
let decompressed = zstd_decompress(&compressed).await.unwrap();
assert_eq!(decompressed, oversized_data, "oversized data did not survive round-trip");
})