1 use std::error::Error; 2 use std::panic::UnwindSafe; 3 4 pub trait AsDynError<'a> { as_dyn_error(&self) -> &(dyn Error + 'a)5 fn as_dyn_error(&self) -> &(dyn Error + 'a); 6 } 7 8 impl<'a, T: Error + 'a> AsDynError<'a> for T { 9 #[inline] as_dyn_error(&self) -> &(dyn Error + 'a)10 fn as_dyn_error(&self) -> &(dyn Error + 'a) { 11 self 12 } 13 } 14 15 impl<'a> AsDynError<'a> for dyn Error + 'a { 16 #[inline] as_dyn_error(&self) -> &(dyn Error + 'a)17 fn as_dyn_error(&self) -> &(dyn Error + 'a) { 18 self 19 } 20 } 21 22 impl<'a> AsDynError<'a> for dyn Error + Send + 'a { 23 #[inline] as_dyn_error(&self) -> &(dyn Error + 'a)24 fn as_dyn_error(&self) -> &(dyn Error + 'a) { 25 self 26 } 27 } 28 29 impl<'a> AsDynError<'a> for dyn Error + Send + Sync + 'a { 30 #[inline] as_dyn_error(&self) -> &(dyn Error + 'a)31 fn as_dyn_error(&self) -> &(dyn Error + 'a) { 32 self 33 } 34 } 35 36 impl<'a> AsDynError<'a> for dyn Error + Send + Sync + UnwindSafe + 'a { 37 #[inline] as_dyn_error(&self) -> &(dyn Error + 'a)38 fn as_dyn_error(&self) -> &(dyn Error + 'a) { 39 self 40 } 41 } 42