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;
 8use std::str::Utf8Error;
 9
10use openssl::ssl::HandshakeError;
11use openssl::error::ErrorStack;
12
13use quick_xml::errors::Error as XmlError;
14
15use minidom::Error as MinidomError;
16
17use base64::DecodeError;
18
19use components::sasl_error::SaslError;
20
21/// An error which wraps a bunch of errors from different crates and the stdlib.
22#[derive(Debug)]
23pub enum Error {
24    XmlError(XmlError),
25    IoError(io::Error),
26    HandshakeError(HandshakeError<TcpStream>),
27    OpenSslErrorStack(ErrorStack),
28    MinidomError(MinidomError),
29    Base64Error(DecodeError),
30    SaslError(Option<String>),
31    XmppSaslError(SaslError),
32    FormatError(FormatError),
33    Utf8Error(Utf8Error),
34    StreamError,
35    EndOfDocument,
36}
37
38impl From<XmlError> for Error {
39    fn from(err: XmlError) -> Error {
40        Error::XmlError(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<DecodeError> for Error {
69    fn from(err: DecodeError) -> Error {
70        Error::Base64Error(err)
71    }
72}
73
74impl From<FormatError> for Error {
75    fn from(err: FormatError) -> Error {
76        Error::FormatError(err)
77    }
78}
79
80impl From<Utf8Error> for Error {
81    fn from(err: Utf8Error) -> Error {
82        Error::Utf8Error(err)
83    }
84}