error.rs

 1//! Provides an `Error` for use in this crate.
 2
 3use std::io;
 4
 5use std::net::TcpStream;
 6
 7use openssl::ssl::HandshakeError;
 8use openssl::error::ErrorStack;
 9
10use xml::reader::Error as XmlError;
11use xml::writer::Error as EmitterError;
12
13use minidom::Error as MinidomError;
14
15use base64::Base64Error;
16
17/// An error which wraps a bunch of errors from different crates and the stdlib.
18#[derive(Debug)]
19pub enum Error {
20    XmlError(XmlError),
21    EmitterError(EmitterError),
22    IoError(io::Error),
23    HandshakeError(HandshakeError<TcpStream>),
24    OpenSslErrorStack(ErrorStack),
25    MinidomError(MinidomError),
26    Base64Error(Base64Error),
27    SaslError(Option<String>),
28    StreamError,
29    EndOfDocument,
30}
31
32impl From<XmlError> for Error {
33    fn from(err: XmlError) -> Error {
34        Error::XmlError(err)
35    }
36}
37
38impl From<EmitterError> for Error {
39    fn from(err: EmitterError) -> Error {
40        Error::EmitterError(err)
41    }
42}
43
44impl From<io::Error> for Error {
45    fn from(err: io::Error) -> Error {
46        Error::IoError(err)
47    }
48}
49
50impl From<HandshakeError<TcpStream>> for Error {
51    fn from(err: HandshakeError<TcpStream>) -> Error {
52        Error::HandshakeError(err)
53    }
54}
55
56impl From<ErrorStack> for Error {
57    fn from(err: ErrorStack) -> Error {
58        Error::OpenSslErrorStack(err)
59    }
60}
61
62impl From<MinidomError> for Error {
63    fn from(err: MinidomError) -> Error {
64        Error::MinidomError(err)
65    }
66}
67
68impl From<Base64Error> for Error {
69    fn from(err: Base64Error) -> Error {
70        Error::Base64Error(err)
71    }
72}