error.rs

 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}