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