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
17use components::sasl_error::SaslError;
18
19/// An error which wraps a bunch of errors from different crates and the stdlib.
20#[derive(Debug)]
21pub enum Error {
22    XmlError(XmlError),
23    EmitterError(EmitterError),
24    IoError(io::Error),
25    HandshakeError(HandshakeError<TcpStream>),
26    OpenSslErrorStack(ErrorStack),
27    MinidomError(MinidomError),
28    Base64Error(Base64Error),
29    SaslError(Option<String>),
30    XmppSaslError(SaslError),
31    StreamError,
32    EndOfDocument,
33}
34
35impl From<XmlError> for Error {
36    fn from(err: XmlError) -> Error {
37        Error::XmlError(err)
38    }
39}
40
41impl From<EmitterError> for Error {
42    fn from(err: EmitterError) -> Error {
43        Error::EmitterError(err)
44    }
45}
46
47impl From<io::Error> for Error {
48    fn from(err: io::Error) -> Error {
49        Error::IoError(err)
50    }
51}
52
53impl From<HandshakeError<TcpStream>> for Error {
54    fn from(err: HandshakeError<TcpStream>) -> Error {
55        Error::HandshakeError(err)
56    }
57}
58
59impl From<ErrorStack> for Error {
60    fn from(err: ErrorStack) -> Error {
61        Error::OpenSslErrorStack(err)
62    }
63}
64
65impl From<MinidomError> for Error {
66    fn from(err: MinidomError) -> Error {
67        Error::MinidomError(err)
68    }
69}
70
71impl From<Base64Error> for Error {
72    fn from(err: Base64Error) -> Error {
73        Error::Base64Error(err)
74    }
75}