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