compression_codecs/lzma/
decoder.rs

1use crate::{DecodeV2, DecodedSize, Xz2Decoder};
2use compression_core::util::{PartialBuffer, WriteBuffer};
3use std::{convert::TryInto, io::Result};
4
5/// Lzma decoding stream
6#[derive(Debug)]
7pub struct LzmaDecoder {
8    inner: Xz2Decoder,
9}
10
11impl From<Xz2Decoder> for LzmaDecoder {
12    fn from(inner: Xz2Decoder) -> Self {
13        Self { inner }
14    }
15}
16
17impl Default for LzmaDecoder {
18    fn default() -> Self {
19        Self {
20            inner: Xz2Decoder::new(usize::MAX.try_into().unwrap()),
21        }
22    }
23}
24
25impl LzmaDecoder {
26    pub fn new() -> Self {
27        Self::default()
28    }
29
30    pub fn with_memlimit(memlimit: u64) -> Self {
31        Self {
32            inner: Xz2Decoder::new(memlimit),
33        }
34    }
35}
36
37impl DecodeV2 for LzmaDecoder {
38    fn reinit(&mut self) -> Result<()> {
39        self.inner.reinit()
40    }
41
42    fn decode(
43        &mut self,
44        input: &mut PartialBuffer<&[u8]>,
45        output: &mut WriteBuffer<'_>,
46    ) -> Result<bool> {
47        self.inner.decode(input, output)
48    }
49
50    fn flush(&mut self, output: &mut WriteBuffer<'_>) -> Result<bool> {
51        self.inner.flush(output)
52    }
53
54    fn finish(&mut self, output: &mut WriteBuffer<'_>) -> Result<bool> {
55        self.inner.finish(output)
56    }
57}
58
59impl DecodedSize for LzmaDecoder {
60    fn decoded_size(input: &[u8]) -> Result<u64> {
61        Xz2Decoder::decoded_size(input)
62    }
63}