From 3be0e6140b9d7cbdda710f4b1bc56493a28bc323 Mon Sep 17 00:00:00 2001 From: Frando Date: Tue, 4 Nov 2025 15:53:20 +0100 Subject: [PATCH 1/2] feat: impl StackError for Arc --- src/error.rs | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/error.rs b/src/error.rs index 5405e1e..c19ad17 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,4 +1,7 @@ -use std::fmt::{self, Formatter}; +use std::{ + fmt::{self, Formatter}, + sync::Arc, +}; use crate::{AnyError, Location, Meta, backtrace_enabled}; @@ -353,3 +356,33 @@ impl_stack_error_for_std_error!(std::str::Utf8Error); impl_stack_error_for_std_error!(std::string::FromUtf8Error); impl_stack_error_for_std_error!(std::net::AddrParseError); impl_stack_error_for_std_error!(std::array::TryFromSliceError); + +impl StackError for Arc { + fn as_std(&self) -> &(dyn std::error::Error + Send + Sync + 'static) { + (&**self).as_std() + } + + fn into_std(self: Box) -> Box { + self + } + + fn as_dyn(&self) -> &dyn StackError { + (&**self).as_dyn() + } + + fn meta(&self) -> Option<&Meta> { + (&**self).meta() + } + + fn source(&self) -> Option> { + StackError::source(&**self) + } + + fn fmt_message(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + (&**self).fmt_message(f) + } + + fn is_transparent(&self) -> bool { + (&**self).is_transparent() + } +} From 348dbd85a8e5f77cd770b559c263778eedf7b4c8 Mon Sep 17 00:00:00 2001 From: Frando Date: Tue, 4 Nov 2025 16:28:47 +0100 Subject: [PATCH 2/2] chore: clippy --- src/error.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/error.rs b/src/error.rs index c19ad17..204c039 100644 --- a/src/error.rs +++ b/src/error.rs @@ -359,7 +359,7 @@ impl_stack_error_for_std_error!(std::array::TryFromSliceError); impl StackError for Arc { fn as_std(&self) -> &(dyn std::error::Error + Send + Sync + 'static) { - (&**self).as_std() + (**self).as_std() } fn into_std(self: Box) -> Box { @@ -367,11 +367,11 @@ impl StackError for Arc } fn as_dyn(&self) -> &dyn StackError { - (&**self).as_dyn() + (**self).as_dyn() } fn meta(&self) -> Option<&Meta> { - (&**self).meta() + (**self).meta() } fn source(&self) -> Option> { @@ -379,10 +379,10 @@ impl StackError for Arc } fn fmt_message(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - (&**self).fmt_message(f) + (**self).fmt_message(f) } fn is_transparent(&self) -> bool { - (&**self).is_transparent() + (**self).is_transparent() } }