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