streaming_crypto/core_api/compression/
registry.rs1use crate::compression::{CodecOptions};
7use crate::compression::types::{codec_ids, Compressor, Decompressor, CompressionError};
8use crate::compression::codecs::{auto, deflate, lz4, zstd};
9
10pub fn create_compressor(codec_id: u16, options: Option<CodecOptions>)
11 -> Result<Box<dyn Compressor + Send>, CompressionError>
12{
13 let opts: CodecOptions<'_> = options.unwrap_or(CodecOptions::default(None));
14 match codec_id {
15 x if x == codec_ids::AUTO => Ok(Box::new(auto::AutoCompressor::new())),
16 x if x == codec_ids::DEFLATE => deflate::DeflateCompressor::new(opts.level.unwrap_or(6)),
17 x if x == codec_ids::LZ4 => lz4::Lz4Compressor::new(opts.level.unwrap_or(0), opts.dict),
18 x if x == codec_ids::ZSTD => zstd::ZstdCompressor::new(opts.level.unwrap_or(6), opts.dict),
19 other => Err(CompressionError::UnsupportedCodec { codec_id: other }),
20 }
21}
22
23pub fn create_decompressor(codec_id: u16, options: Option<CodecOptions>)
24 -> Result<Box<dyn Decompressor + Send>, CompressionError>
25{
26 let opts: CodecOptions<'_> = options.unwrap_or(CodecOptions::default(None));
27 match codec_id {
28 x if x == codec_ids::AUTO => Ok(Box::new(auto::AutoDecompressor::new())),
29 x if x == codec_ids::DEFLATE => deflate::DeflateDecompressor::new(),
30 x if x == codec_ids::LZ4 => lz4::Lz4Decompressor::new(opts.dict),
31 x if x == codec_ids::ZSTD => zstd::ZstdDecompressor::new(opts.dict),
32 other => Err(CompressionError::UnsupportedCodec { codec_id: other }),
33 }
34}