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 }