1// Copyright (c) 2017-2018 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7use std::convert::From;
8use std::io;
9use std::num;
10use std::string;
11use std::fmt;
12use std::net;
13
14use base64;
15use minidom;
16use jid;
17use chrono;
18
19#[derive(Debug)]
20pub enum Error {
21 ParseError(&'static str),
22 IoError(io::Error),
23 XMLError(minidom::Error),
24 Base64Error(base64::DecodeError),
25 ParseIntError(num::ParseIntError),
26 ParseStringError(string::ParseError),
27 ParseAddrError(net::AddrParseError),
28 JidParseError(jid::JidParseError),
29 ChronoParseError(chrono::ParseError),
30}
31
32impl fmt::Display for Error {
33 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
34 match *self {
35 Error::ParseError(s) => write!(fmt, "{}", s),
36 Error::IoError(ref e) => write!(fmt, "{}", e),
37 Error::XMLError(ref e) => write!(fmt, "{}", e),
38 Error::Base64Error(ref e) => write!(fmt, "{}", e),
39 Error::ParseIntError(ref e) => write!(fmt, "{}", e),
40 Error::ParseStringError(ref e) => write!(fmt, "{}", e),
41 Error::ParseAddrError(ref e) => write!(fmt, "{}", e),
42 Error::JidParseError(_) => write!(fmt, "JID parse error"),
43 Error::ChronoParseError(ref e) => write!(fmt, "{}", e),
44 }
45 }
46}
47
48impl From<io::Error> for Error {
49 fn from(err: io::Error) -> Error {
50 Error::IoError(err)
51 }
52}
53
54impl From<minidom::Error> for Error {
55 fn from(err: minidom::Error) -> Error {
56 Error::XMLError(err)
57 }
58}
59
60impl From<base64::DecodeError> for Error {
61 fn from(err: base64::DecodeError) -> Error {
62 Error::Base64Error(err)
63 }
64}
65
66impl From<num::ParseIntError> for Error {
67 fn from(err: num::ParseIntError) -> Error {
68 Error::ParseIntError(err)
69 }
70}
71
72impl From<string::ParseError> for Error {
73 fn from(err: string::ParseError) -> Error {
74 Error::ParseStringError(err)
75 }
76}
77
78impl From<net::AddrParseError> for Error {
79 fn from(err: net::AddrParseError) -> Error {
80 Error::ParseAddrError(err)
81 }
82}
83
84impl From<jid::JidParseError> for Error {
85 fn from(err: jid::JidParseError) -> Error {
86 Error::JidParseError(err)
87 }
88}
89
90impl From<chrono::ParseError> for Error {
91 fn from(err: chrono::ParseError) -> Error {
92 Error::ChronoParseError(err)
93 }
94}