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