1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
/// Options to tweak decompression behavior.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub struct Options {
/// Defines whether the unpacked size should be read from the header or provided.
///
/// The default is
/// [`UnpackedSize::ReadFromHeader`](enum.UnpackedSize.html#variant.ReadFromHeader).
pub unpacked_size: UnpackedSize,
/// Defines whether the dictionary's dynamic size should be limited during decompression.
///
/// The default is unlimited.
pub memlimit: Option<usize>,
/// Determines whether to bypass end of stream validation.
///
/// This option only applies to the [`Stream`](struct.Stream.html) API.
///
/// The default is false (always do completion check).
pub allow_incomplete: bool,
}
/// Alternatives for defining the unpacked size of the decoded data.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum UnpackedSize {
/// Assume that the 8 bytes used to specify the unpacked size are present in the header.
/// If the bytes are `0xFFFF_FFFF_FFFF_FFFF`, assume that there is an end-of-payload marker in
/// the file.
/// If not, read the 8 bytes as a little-endian encoded u64.
ReadFromHeader,
/// Assume that there are 8 bytes representing the unpacked size present in the header.
/// Read it, but ignore it and use the provided value instead.
/// If the provided value is `None`, assume that there is an end-of-payload marker in the file.
/// Note that this is a non-standard way of reading LZMA data,
/// but is used by certain libraries such as
/// [OpenCTM](http://openctm.sourceforge.net/).
ReadHeaderButUseProvided(Option<u64>),
/// Assume that the 8 bytes typically used to represent the unpacked size are *not* present in
/// the header. Use the provided value.
/// If the provided value is `None`, assume that there is an end-of-payload marker in the file.
UseProvided(Option<u64>),
}
impl Default for UnpackedSize {
fn default() -> UnpackedSize {
UnpackedSize::ReadFromHeader
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_options() {
assert_eq!(
Options {
unpacked_size: UnpackedSize::ReadFromHeader,
memlimit: None,
allow_incomplete: false,
},
Options::default()
);
}
}