Skip to main content

vecdb/variants/compressed/lz4/
strategy.rs

1use std::marker::PhantomData;
2
3use lz4_flex::{compress_prepend_size, decompress_size_prepended};
4
5use crate::{Result, impl_bytes_value_strategy};
6
7use super::{super::inner::CompressionStrategy, value::LZ4VecValue};
8
9/// LZ4 compression strategy for fast compression/decompression.
10#[derive(Debug, Clone, Copy)]
11pub struct LZ4Strategy<T>(PhantomData<T>);
12
13impl_bytes_value_strategy!(LZ4Strategy, LZ4VecValue);
14
15impl<T> CompressionStrategy<T> for LZ4Strategy<T>
16where
17    T: LZ4VecValue,
18{
19    fn compress(values: &[T]) -> Result<Vec<u8>> {
20        Ok(compress_prepend_size(&Self::values_to_bytes(values)))
21    }
22
23    fn decompress(bytes: &[u8], expected_len: usize) -> Result<Vec<T>> {
24        let decompressed = decompress_size_prepended(bytes)?;
25        Self::bytes_to_values(&decompressed, expected_len)
26    }
27
28    fn decompress_into(bytes: &[u8], expected_len: usize, dst: &mut Vec<T>) -> Result<()> {
29        let decompressed = decompress_size_prepended(bytes)?;
30        Self::bytes_to_values_into(&decompressed, expected_len, dst)
31    }
32}