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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use lzma_sys::*;
use std::convert::From;
use std::result::Result;
use std::error;
use std::fmt;
use std::error::Error as StdError;
use std::io::Error as IoError;
#[derive(Debug)]
pub enum LzmaError {
Mem,
MemLimit,
Format,
Options,
Data,
Buf,
Io(IoError),
Other,
}
impl fmt::Display for LzmaError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
LzmaError::Io(ref err) => write!(f, "{}", err),
_ => write!(f, "{}", self.description()),
}
}
}
impl StdError for LzmaError {
fn description(&self) -> &str {
match *self {
LzmaError::Mem => "Memory allocation failed",
LzmaError::MemLimit => "Memory limit would be violated",
LzmaError::Format => "XZ magic bytes were not found",
LzmaError::Options => "Unsupported compression options",
LzmaError::Data => "Corrupt data",
LzmaError::Buf => "Data look like it was truncated or possibly corrupt",
LzmaError::Io(..) => "IO error",
LzmaError::Other => "Unknown error",
}
}
fn cause(&self) -> Option<&dyn error::Error> {
match *self {
LzmaError::Io(ref err) => Some(err),
_ => None,
}
}
}
impl From<IoError> for LzmaError {
fn from(err: IoError) -> LzmaError {
LzmaError::Io(err)
}
}
pub type LzmaLibResult = Result<lzma_ret, LzmaError>;
impl From<lzma_ret> for LzmaLibResult {
fn from(ret: lzma_ret) -> LzmaLibResult {
match ret {
lzma_ret::LzmaOk => Ok(ret),
lzma_ret::LzmaStreamEnd => Ok(ret),
lzma_ret::LzmaNoCheck => Ok(ret),
lzma_ret::LzmaUnsupportedCheck => Ok(ret),
lzma_ret::LzmaGetCheck => Ok(ret),
lzma_ret::LzmaMemError => Err(LzmaError::Mem),
lzma_ret::LzmaMemlimitError => Err(LzmaError::MemLimit),
lzma_ret::LzmaFormatError => Err(LzmaError::Format),
lzma_ret::LzmaOptionsError => Err(LzmaError::Options),
lzma_ret::LzmaDataError => Err(LzmaError::Data),
lzma_ret::LzmaBufError => Err(LzmaError::Buf),
_ => Err(LzmaError::Other),
}
}
}