1use std::io::Error as IoError;
2use std::error::Error as StdError;
3use std::str::Utf8Error;
4use std::borrow::Cow;
5use std::fmt;
6use domain::resolv::error::Error as DNSError;
7use domain::bits::name::FromStrError;
8use native_tls::Error as TlsError;
9use xmpp_parsers::error::Error as ParsersError;
10use xmpp_parsers::sasl::DefinedCondition as SaslDefinedCondition;
11
12#[derive(Debug, Error)]
13pub enum Error {
14 Io(IoError),
15 Connection(ConnecterError),
16 /// DNS label conversion error, no details available from module
17 /// `idna`
18 Idna,
19 Domain(FromStrError),
20 Protocol(ProtocolError),
21 Auth(AuthError),
22 Tls(TlsError),
23 /// Shoud never happen
24 InvalidState,
25}
26
27/// Causes for stream parsing errors
28#[derive(Debug, Error)]
29pub enum ParserError {
30 /// Encoding error
31 Utf8(Utf8Error),
32 /// XML parse error
33 Parse(ParseError),
34 /// Illegal `</>`
35 ShortTag,
36 /// Required by `impl Decoder`
37 IO(IoError),
38}
39
40impl From<ParserError> for Error {
41 fn from(e: ParserError) -> Self {
42 ProtocolError::Parser(e).into()
43 }
44}
45
46/// XML parse error wrapper type
47#[derive(Debug)]
48pub struct ParseError(pub Cow<'static, str>);
49
50impl StdError for ParseError {
51 fn description(&self) -> &str {
52 self.0.as_ref()
53 }
54 fn cause(&self) -> Option<&StdError> {
55 None
56 }
57}
58
59impl fmt::Display for ParseError {
60 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
61 write!(f, "{}", self.0)
62 }
63}
64
65#[derive(Debug, Error)]
66pub enum ProtocolError {
67 Parser(ParserError),
68 #[error(non_std)]
69 Parsers(ParsersError),
70 NoTls,
71 InvalidBindResponse,
72 NoStreamNamespace,
73 NoStreamId,
74 InvalidToken,
75}
76
77#[derive(Debug, Error)]
78pub enum AuthError {
79 /// No SASL mechanism available
80 NoMechanism,
81 #[error(no_from, non_std, msg_embedded)]
82 Sasl(String),
83 #[error(non_std)]
84 Fail(SaslDefinedCondition),
85 #[error(no_from)]
86 ComponentFail,
87}
88
89#[derive(Debug, Error)]
90pub enum ConnecterError {
91 NoSrv,
92 AllFailed,
93 DNS(DNSError),
94}