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