thiserror_ext/as_dyn.rs
1/// Extension trait for [`Error`] that casts the error to a trait object.
2///
3/// [`Error`]: std::error::Error
4pub trait AsDyn: crate::error_sealed::Sealed {
5 /// Casts the error to a trait object.
6 fn as_dyn(&self) -> &(dyn std::error::Error + '_);
7}
8
9impl<T: std::error::Error> AsDyn for T {
10 fn as_dyn(&self) -> &(dyn std::error::Error + '_) {
11 self
12 }
13}
14
15macro_rules! impl_as_dyn {
16 ($({$ty:ty},)*) => {
17 $(
18 impl AsDyn for $ty {
19 fn as_dyn(&self) -> &(dyn std::error::Error + '_) {
20 self
21 }
22 }
23 )*
24 };
25}
26
27crate::for_dyn_error_types! { impl_as_dyn }