From 3c92e88164db6a94177fb4adeb18c80dffc377e4 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Thu, 12 Dec 2019 02:16:27 +0100 Subject: remove quick_error quick_error used the deprecated Error::cause interface, therefore we want to use our own error enums with proper methods. --- src/bt.rs | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'src/bt.rs') diff --git a/src/bt.rs b/src/bt.rs index 21078ff..cf95f3c 100644 --- a/src/bt.rs +++ b/src/bt.rs @@ -1,20 +1,35 @@ use super::api::{Api, ApiError, Skill, Specialization}; use num_enum::{IntoPrimitive, TryFromPrimitive}; -use std::{convert::TryFrom, fmt, str::FromStr}; - -quick_error! { - #[derive(Debug)] - pub enum ChatlinkError { - ApiError(err: ApiError) { - cause(err) - from() +use std::{convert::TryFrom, error::Error, fmt, str::FromStr}; + +#[derive(Debug)] +pub enum ChatlinkError { + ApiError(ApiError), + MalformedInput, +} + +error_froms! { ChatlinkError, + err: ApiError => ChatlinkError::ApiError(err), + _err: base64::DecodeError => ChatlinkError::MalformedInput, + _err: num_enum::TryFromPrimitiveError => ChatlinkError::MalformedInput, + _err: num_enum::TryFromPrimitiveError => ChatlinkError::MalformedInput, + _err: num_enum::TryFromPrimitiveError => ChatlinkError::MalformedInput, +} + +impl fmt::Display for ChatlinkError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + ChatlinkError::ApiError(_) => write!(f, "error accessing the API"), + ChatlinkError::MalformedInput => write!(f, "the input link is malformed"), } - MalformedInput { - description("The input link is malformed") - from(base64::DecodeError) - from(num_enum::TryFromPrimitiveError) - from(num_enum::TryFromPrimitiveError) - from(num_enum::TryFromPrimitiveError) + } +} + +impl Error for ChatlinkError { + fn source(&self) -> Option<&(dyn Error + 'static)> { + match *self { + ChatlinkError::ApiError(ref err) => Some(err), + _ => None, } } } -- cgit v1.2.3