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}