1#[derive(Debug)]
4pub enum Error {
5 Initialization(Box<dyn std::error::Error + Send + Sync>),
6 Write(::std::io::Error),
7 Io(::std::io::Error),
8}
9
10pub type Result<T> = std::result::Result<T, Error>;
11
12impl std::error::Error for Error {
13 fn cause(&self) -> Option<&dyn std::error::Error> {
14 match *self {
15 Error::Initialization(ref err) => Some(&**err),
16 Error::Write(_) => None,
17 Error::Io(ref err) => Some(err),
18 }
19 }
20}
21
22impl std::fmt::Display for Error {
23 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24 match *self {
25 Error::Initialization(ref err) => write!(f, "Initialization error: {}", err),
26 Error::Write(ref err) => write!(f, "Write error: {}", err),
27 Error::Io(ref err) => write!(f, "Io error: {}", err),
28 }
29 }
30}
31
32impl From<std::io::Error> for Error {
33 fn from(err: std::io::Error) -> Error {
34 Error::Io(err)
35 }
36}
37
38#[test]
39fn error_is_send_sync() {
40 fn is_send_sync<T: Send + Sync>() {}
41 is_send_sync::<Error>();
42}