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 xml::reader::Error as XmlError;
13use xml::writer::Error as EmitterError;
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 EmitterError(EmitterError),
26 IoError(io::Error),
27 HandshakeError(HandshakeError<TcpStream>),
28 OpenSslErrorStack(ErrorStack),
29 MinidomError(MinidomError),
30 Base64Error(DecodeError),
31 SaslError(Option<String>),
32 XmppSaslError(SaslError),
33 FormatError(FormatError),
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<EmitterError> for Error {
45 fn from(err: EmitterError) -> Error {
46 Error::EmitterError(err)
47 }
48}
49
50impl From<io::Error> for Error {
51 fn from(err: io::Error) -> Error {
52 Error::IoError(err)
53 }
54}
55
56impl From<HandshakeError<TcpStream>> for Error {
57 fn from(err: HandshakeError<TcpStream>) -> Error {
58 Error::HandshakeError(err)
59 }
60}
61
62impl From<ErrorStack> for Error {
63 fn from(err: ErrorStack) -> Error {
64 Error::OpenSslErrorStack(err)
65 }
66}
67
68impl From<MinidomError> for Error {
69 fn from(err: MinidomError) -> Error {
70 Error::MinidomError(err)
71 }
72}
73
74impl From<DecodeError> for Error {
75 fn from(err: DecodeError) -> Error {
76 Error::Base64Error(err)
77 }
78}
79
80impl From<FormatError> for Error {
81 fn from(err: FormatError) -> Error {
82 Error::FormatError(err)
83 }
84}