diff --git a/src/aserror.rs b/src/aserror.rs index 67e8506..8290296 100644 --- a/src/aserror.rs +++ b/src/aserror.rs @@ -18,6 +18,13 @@ impl AsDynError for dyn Error + 'static { } } +impl AsDynError for dyn Error + Send + 'static { + #[inline] + fn as_dyn_error(&self) -> &(dyn Error + 'static) { + self + } +} + impl AsDynError for dyn Error + Send + Sync + 'static { #[inline] fn as_dyn_error(&self) -> &(dyn Error + 'static) { diff --git a/tests/test_source.rs b/tests/test_source.rs index ab96113..83c3f77 100644 --- a/tests/test_source.rs +++ b/tests/test_source.rs @@ -1,4 +1,4 @@ -use std::error::Error as _; +use std::error::Error; use std::io; use thiserror::Error; @@ -16,6 +16,13 @@ pub struct ExplicitSource { io: io::Error, } +#[derive(Error, Debug)] +#[error("boxed source")] +pub struct BoxedSource { + #[source] + source: Box, +} + #[test] fn test_implicit_source() { let io = io::Error::new(io::ErrorKind::Other, "oh no!"); @@ -32,3 +39,11 @@ fn test_explicit_source() { }; error.source().unwrap().downcast_ref::().unwrap(); } + +#[test] +fn test_boxed_source() { + let io = io::Error::new(io::ErrorKind::Other, "oh no!"); + let _error = BoxedSource { + source: Box::new(io), + }; +}