1use lzma_sys::*;
2use std::convert::From;
3use std::result::Result;
4use std::error;
5use std::fmt;
6use std::error::Error as StdError;
7use std::io::Error as IoError;
8
9
10#[derive(Debug)]
12pub enum LzmaError {
13 Mem,
15 MemLimit,
17 Format,
19 Options,
21 Data,
23 Buf,
25 Io(IoError),
27 Other,
29}
30
31impl fmt::Display for LzmaError {
32 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33 match *self {
34 LzmaError::Mem => write!(f, "Memory allocation failed"),
35 LzmaError::MemLimit => write!(f, "Memory limit would be violated"),
36 LzmaError::Format => write!(f, "XZ magic bytes were not found"),
37 LzmaError::Options => write!(f, "Unsupported compression options"),
38 LzmaError::Data => write!(f, "Corrupt data"),
39 LzmaError::Buf => write!(f, "Data look like it was truncated or possibly corrupt"),
40 LzmaError::Io(ref err) => write!(f, "{}", err),
41 LzmaError::Other => write!(f, "Unknown error"),
42 }
43 }
44}
45
46impl StdError for LzmaError {
47 fn description(&self) -> &str {
48 match *self {
49 LzmaError::Mem => "Memory allocation failed",
50 LzmaError::MemLimit => "Memory limit would be violated",
51 LzmaError::Format => "XZ magic bytes were not found",
52 LzmaError::Options => "Unsupported compression options",
53 LzmaError::Data => "Corrupt data",
54 LzmaError::Buf => "Data look like it was truncated or possibly corrupt",
55 LzmaError::Io(..) => "IO error",
56 LzmaError::Other => "Unknown error",
57 }
58 }
59
60 fn cause(&self) -> Option<&dyn error::Error> {
61 match *self {
62 LzmaError::Io(ref err) => Some(err),
63 _ => None,
64 }
65 }
66}
67
68impl From<IoError> for LzmaError {
69 fn from(err: IoError) -> LzmaError {
70 LzmaError::Io(err)
71 }
72}
73
74
75pub type LzmaLibResult = Result<lzma_ret, LzmaError>;
77
78impl From<lzma_ret> for LzmaLibResult {
79 fn from(ret: lzma_ret) -> LzmaLibResult {
80 match ret {
81 lzma_ret::LzmaOk => Ok(ret),
82 lzma_ret::LzmaStreamEnd => Ok(ret),
83 lzma_ret::LzmaNoCheck => Ok(ret),
84 lzma_ret::LzmaUnsupportedCheck => Ok(ret), lzma_ret::LzmaGetCheck => Ok(ret),
86 lzma_ret::LzmaMemError => Err(LzmaError::Mem),
87 lzma_ret::LzmaMemlimitError => Err(LzmaError::MemLimit),
88 lzma_ret::LzmaFormatError => Err(LzmaError::Format),
89 lzma_ret::LzmaOptionsError => Err(LzmaError::Options),
90 lzma_ret::LzmaDataError => Err(LzmaError::Data),
91 lzma_ret::LzmaBufError => Err(LzmaError::Buf),
92 _ => Err(LzmaError::Other),
93 }
94 }
95}