From 1d2737122e3e814998e79489f745b6d341869121 Mon Sep 17 00:00:00 2001 From: fef Date: Mon, 24 Jul 2023 01:20:01 +0200 Subject: [PATCH] error: implement std's Error trait --- src/core/error.rs | 15 +++++++++++++++ src/util/crypto.rs | 6 ++++++ src/util/validate.rs | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/core/error.rs b/src/core/error.rs index 55a5e2e..c11221e 100644 --- a/src/core/error.rs +++ b/src/core/error.rs @@ -52,6 +52,21 @@ impl ResponseError for Error { } } +impl std::error::Error for Error { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + match self { + Error::BadToken(e) => Some(e), + Error::Crypto(e) => Some(e), + Error::Database(e) => Some(e), + Error::Invalid(e) => Some(e), + Error::Io(e) => Some(e), + Error::MalformedHeader(e) => Some(e), + Error::Reqwest(e) => Some(e), + _ => None, + } + } +} + impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { diff --git a/src/util/crypto.rs b/src/util/crypto.rs index 9cdf347..bb14ca4 100644 --- a/src/util/crypto.rs +++ b/src/util/crypto.rs @@ -360,6 +360,12 @@ where } } +impl std::error::Error for Error { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + self.0.source() + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/util/validate.rs b/src/util/validate.rs index 72436cf..f731e44 100644 --- a/src/util/validate.rs +++ b/src/util/validate.rs @@ -158,3 +158,5 @@ impl fmt::Display for Error { Ok(()) } } + +impl std::error::Error for Error {}