2018-03-01 10:01:35 +01:00
|
|
|
// Copyright (c) 2017-2018 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
|
2017-04-29 22:14:34 +01:00
|
|
|
//
|
|
|
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
2017-04-18 20:44:36 +01:00
|
|
|
use std::convert::From;
|
|
|
|
|
use std::io;
|
2017-04-22 17:39:00 +01:00
|
|
|
use std::num;
|
2017-05-06 12:48:42 +01:00
|
|
|
use std::string;
|
2017-06-17 03:36:12 +01:00
|
|
|
use std::fmt;
|
2018-05-04 21:19:40 +02:00
|
|
|
use std::net;
|
2017-04-18 20:44:36 +01:00
|
|
|
|
2017-04-21 02:46:41 +01:00
|
|
|
use base64;
|
2017-04-18 20:44:36 +01:00
|
|
|
use minidom;
|
2017-04-29 06:06:41 +01:00
|
|
|
use jid;
|
2017-05-27 12:20:19 +01:00
|
|
|
use chrono;
|
2017-04-18 20:44:36 +01:00
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub enum Error {
|
2017-04-21 02:46:41 +01:00
|
|
|
ParseError(&'static str),
|
2017-04-18 20:44:36 +01:00
|
|
|
IoError(io::Error),
|
|
|
|
|
XMLError(minidom::Error),
|
2017-04-27 18:33:02 +01:00
|
|
|
Base64Error(base64::DecodeError),
|
2017-04-22 17:39:00 +01:00
|
|
|
ParseIntError(num::ParseIntError),
|
2017-05-06 12:48:42 +01:00
|
|
|
ParseStringError(string::ParseError),
|
2018-05-04 21:19:40 +02:00
|
|
|
ParseAddrError(net::AddrParseError),
|
2017-04-29 06:06:41 +01:00
|
|
|
JidParseError(jid::JidParseError),
|
2017-05-27 12:20:19 +01:00
|
|
|
ChronoParseError(chrono::ParseError),
|
2017-04-18 20:44:36 +01:00
|
|
|
}
|
|
|
|
|
|
2017-06-17 03:36:12 +01:00
|
|
|
impl fmt::Display for Error {
|
|
|
|
|
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
|
|
|
|
match *self {
|
|
|
|
|
Error::ParseError(s) => write!(fmt, "{}", s),
|
|
|
|
|
Error::IoError(ref e) => write!(fmt, "{}", e),
|
|
|
|
|
Error::XMLError(ref e) => write!(fmt, "{}", e),
|
|
|
|
|
Error::Base64Error(ref e) => write!(fmt, "{}", e),
|
|
|
|
|
Error::ParseIntError(ref e) => write!(fmt, "{}", e),
|
|
|
|
|
Error::ParseStringError(ref e) => write!(fmt, "{}", e),
|
2018-05-04 21:19:40 +02:00
|
|
|
Error::ParseAddrError(ref e) => write!(fmt, "{}", e),
|
2017-06-17 03:36:12 +01:00
|
|
|
Error::JidParseError(_) => write!(fmt, "JID parse error"),
|
|
|
|
|
Error::ChronoParseError(ref e) => write!(fmt, "{}", e),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-18 20:44:36 +01:00
|
|
|
impl From<io::Error> for Error {
|
|
|
|
|
fn from(err: io::Error) -> Error {
|
|
|
|
|
Error::IoError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<minidom::Error> for Error {
|
|
|
|
|
fn from(err: minidom::Error) -> Error {
|
|
|
|
|
Error::XMLError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-04-21 02:46:41 +01:00
|
|
|
|
2017-04-27 18:33:02 +01:00
|
|
|
impl From<base64::DecodeError> for Error {
|
|
|
|
|
fn from(err: base64::DecodeError) -> Error {
|
2017-04-21 02:46:41 +01:00
|
|
|
Error::Base64Error(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-04-22 17:39:00 +01:00
|
|
|
|
|
|
|
|
impl From<num::ParseIntError> for Error {
|
|
|
|
|
fn from(err: num::ParseIntError) -> Error {
|
|
|
|
|
Error::ParseIntError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-04-29 06:06:41 +01:00
|
|
|
|
2017-05-06 12:48:42 +01:00
|
|
|
impl From<string::ParseError> for Error {
|
|
|
|
|
fn from(err: string::ParseError) -> Error {
|
|
|
|
|
Error::ParseStringError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-04 21:19:40 +02:00
|
|
|
impl From<net::AddrParseError> for Error {
|
|
|
|
|
fn from(err: net::AddrParseError) -> Error {
|
|
|
|
|
Error::ParseAddrError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-29 06:06:41 +01:00
|
|
|
impl From<jid::JidParseError> for Error {
|
|
|
|
|
fn from(err: jid::JidParseError) -> Error {
|
|
|
|
|
Error::JidParseError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-05-27 12:20:19 +01:00
|
|
|
|
|
|
|
|
impl From<chrono::ParseError> for Error {
|
|
|
|
|
fn from(err: chrono::ParseError) -> Error {
|
|
|
|
|
Error::ChronoParseError(err)
|
|
|
|
|
}
|
|
|
|
|
}
|