heddle_pack/store/pack/
compact_frame.rs1use crate::store::Result;
4
5pub fn compress_compact_frame(data: &[u8]) -> Result<Vec<u8>> {
12 #[cfg(feature = "zstd")]
13 {
14 use std::io::Write;
15
16 let mut compressed = Vec::new();
17 let mut encoder = zstd::stream::write::Encoder::new(&mut compressed, 19)?;
18 encoder.window_log(27)?;
19 encoder.long_distance_matching(true)?;
20 encoder.include_checksum(true)?;
21 encoder.set_pledged_src_size(Some(data.len() as u64))?;
22 encoder.write_all(data)?;
23 encoder.finish()?;
24 if compressed.len() < data.len() {
25 return Ok(compressed);
26 }
27 }
28 Ok(data.to_vec())
29}
30
31#[cfg(all(test, feature = "zstd"))]
32mod tests {
33 use super::*;
34 use crate::store::pack::{decompress_pack_payload, has_zstd_magic};
35
36 #[test]
37 fn solid_compression_round_trips_and_carries_a_zstd_checksum() {
38 let input = b"directory version\n".repeat(32_768);
39 let compressed = compress_compact_frame(&input).unwrap();
40 assert!(has_zstd_magic(&compressed));
41 assert!(compressed.len() < input.len());
42 assert_eq!(
43 decompress_pack_payload(&compressed, input.len()).unwrap(),
44 input
45 );
46 }
47}