pub trait CompressionAction {
type Error;
type Compressor;
type FilesystemCompressor;
type SuperBlock;
fn decompress(
&self,
bytes: &[u8],
out: &mut Vec<u8>,
compressor: Self::Compressor,
) -> Result<(), Self::Error>;
fn compress(
&self,
bytes: &[u8],
fc: Self::FilesystemCompressor,
block_size: u32,
) -> Result<Vec<u8>, Self::Error>;
fn compression_options(
&self,
_superblock: &mut Self::SuperBlock,
_kind: &crate::kinds::Kind,
_fs_compressor: Self::FilesystemCompressor,
) -> Result<Option<Vec<u8>>, Self::Error> {
Ok(None)
}
}
#[cfg(feature = "v3")]
pub type CompressionActionV3 = dyn CompressionAction<
Error = crate::error::BackhandError,
Compressor = crate::v3::compressor::Compressor,
FilesystemCompressor = crate::v3::compressor::FilesystemCompressor,
SuperBlock = crate::v3::squashfs::SuperBlock,
>;
pub type CompressionActionV4 = dyn CompressionAction<
Error = crate::error::BackhandError,
Compressor = crate::v4::compressor::Compressor,
FilesystemCompressor = crate::v4::filesystem::writer::FilesystemCompressor,
SuperBlock = crate::v4::squashfs::SuperBlock,
>;