mid_compression/
polymorphic.rs

1use enum_dispatch::enum_dispatch;
2
3use crate::{
4    interface::*,
5    zstd,
6};
7
8/// Polymorphic compression routines.
9#[enum_dispatch]
10pub enum PolyCompressor {
11    ZStd(zstd::compressor::ZStdCctx),
12    Unit(()),
13}
14
15/// Polymorphic decompression routines
16#[enum_dispatch]
17pub enum PolyDecompressor {
18    ZStd(zstd::decompressor::ZStdDctx),
19    Unit(()),
20}
21
22impl PolyDecompressor {
23    /// Create unit decompressor. Will panic on every
24    /// decompression
25    pub const fn unit() -> Self {
26        Self::Unit(())
27    }
28
29    /// Create ZStandard decompressor
30    pub fn zstd() -> Self {
31        Self::ZStd(zstd::decompressor::ZStdDctx::new())
32    }
33}
34
35impl PolyCompressor {
36    /// Create unit compressor. Will panic on every
37    /// compression
38    pub const fn unit() -> Self {
39        Self::Unit(())
40    }
41
42    /// Create ZStandard decompressor with supplied level
43    pub fn zstd(level: u8) -> Self {
44        Self::ZStd(zstd::compressor::ZStdCctx::new(level))
45    }
46}