error.rs

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