mid_compression/
interface.rs1use enum_dispatch::enum_dispatch;
2
3#[enum_dispatch(PolyDecompressor)]
5pub trait IDecompressor: Send {
6 fn try_decompressed_size(
8 &self,
9 of: &[u8],
10 ) -> Result<usize, crate::error::SizeRetrievalError>;
11
12 fn try_decompress(
18 &mut self,
19 buffer: &[u8],
20 to: &mut Vec<u8>,
21 ) -> Result<usize, crate::error::DecompressError>;
22}
23
24#[enum_dispatch(PolyCompressor)]
26pub trait ICompressor {
27 fn level(&self) -> usize;
29
30 fn set_level(&mut self, level: usize);
32
33 fn try_compress(
39 &mut self,
40 buf: &[u8],
41 preallocated: &mut Vec<u8>,
42 ) -> Result<std::num::NonZeroUsize, crate::error::CompressError>;
43
44 fn supported_levels(&self) -> std::ops::RangeInclusive<usize>;
46}
47
48impl IDecompressor for () {
49 fn try_decompressed_size(
50 &self,
51 _of: &[u8],
52 ) -> Result<usize, crate::error::SizeRetrievalError> {
53 unimplemented!()
54 }
55
56 fn try_decompress(
57 &mut self,
58 _buffer: &[u8],
59 _to: &mut Vec<u8>,
60 ) -> Result<usize, crate::error::DecompressError> {
61 unimplemented!()
62 }
63}
64
65impl ICompressor for () {
66 fn level(&self) -> usize {
67 0
68 }
69
70 fn set_level(&mut self, _level: usize) {}
71
72 fn try_compress(
73 &mut self,
74 _buf: &[u8],
75 _preallocated: &mut Vec<u8>,
76 ) -> Result<std::num::NonZeroUsize, crate::error::CompressError> {
77 unimplemented!()
78 }
79
80 fn supported_levels(&self) -> std::ops::RangeInclusive<usize> {
81 unimplemented!()
82 }
83}