use crate::error::PdfError;
use compcol::zlib::Zlib;
pub(crate) fn flate_compress(data: &[u8]) -> Vec<u8> {
compcol::vec::compress_to_vec::<Zlib>(data).expect("zlib compression cannot fail on Vec")
}
pub(crate) fn flate_decompress(data: &[u8]) -> Result<Vec<u8>, PdfError> {
compcol::vec::decompress_to_vec::<Zlib>(data)
.map_err(|e| PdfError::other(format!("PDF filter: FlateDecode failed: {e:?}")))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn flate_round_trips_payload() {
let raw = b"the quick brown fox jumps over the lazy dog, repeated; \
the quick brown fox jumps over the lazy dog, repeated.";
let compressed = flate_compress(raw);
assert_eq!(compressed[0], 0x78);
let back = flate_decompress(&compressed).unwrap();
assert_eq!(back, raw);
}
#[test]
fn flate_decompress_rejects_garbage() {
let err = flate_decompress(&[0x00, 0x01, 0x02, 0x03]);
assert!(err.is_err());
}
#[test]
fn flate_compress_empty_round_trips() {
let compressed = flate_compress(b"");
let back = flate_decompress(&compressed).unwrap();
assert!(back.is_empty());
}
}