Skip to main content

streaming_crypto/core_api/compression/
registry.rs

1// ## src/compression/registry.rs
2
3//! compression/registry.rs
4//! Codec registry and factory functions.
5
6use 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}