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::num;
 9use std::string;
10use std::fmt;
11use std::net;
12
13use base64;
14use minidom;
15use jid;
16use chrono;
17
18#[derive(Debug)]
19pub enum Error {
20    ParseError(&'static str),
21    XMLError(minidom::Error),
22    Base64Error(base64::DecodeError),
23    ParseIntError(num::ParseIntError),
24    ParseStringError(string::ParseError),
25    ParseAddrError(net::AddrParseError),
26    JidParseError(jid::JidParseError),
27    ChronoParseError(chrono::ParseError),
28}
29
30impl fmt::Display for Error {
31    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
32        match *self {
33            Error::ParseError(s) => write!(fmt, "{}", s),
34            Error::XMLError(ref e) => write!(fmt, "{}", e),
35            Error::Base64Error(ref e) => write!(fmt, "{}", e),
36            Error::ParseIntError(ref e) => write!(fmt, "{}", e),
37            Error::ParseStringError(ref e) => write!(fmt, "{}", e),
38            Error::ParseAddrError(ref e) => write!(fmt, "{}", e),
39            Error::JidParseError(_) => write!(fmt, "JID parse error"),
40            Error::ChronoParseError(ref e) => write!(fmt, "{}", e),
41        }
42    }
43}
44
45impl From<minidom::Error> for Error {
46    fn from(err: minidom::Error) -> Error {
47        Error::XMLError(err)
48    }
49}
50
51impl From<base64::DecodeError> for Error {
52    fn from(err: base64::DecodeError) -> Error {
53        Error::Base64Error(err)
54    }
55}
56
57impl From<num::ParseIntError> for Error {
58    fn from(err: num::ParseIntError) -> Error {
59        Error::ParseIntError(err)
60    }
61}
62
63impl From<string::ParseError> for Error {
64    fn from(err: string::ParseError) -> Error {
65        Error::ParseStringError(err)
66    }
67}
68
69impl From<net::AddrParseError> for Error {
70    fn from(err: net::AddrParseError) -> Error {
71        Error::ParseAddrError(err)
72    }
73}
74
75impl From<jid::JidParseError> for Error {
76    fn from(err: jid::JidParseError) -> Error {
77        Error::JidParseError(err)
78    }
79}
80
81impl From<chrono::ParseError> for Error {
82    fn from(err: chrono::ParseError) -> Error {
83        Error::ChronoParseError(err)
84    }
85}