Skip to main content

trait_obj_list/
ptr.stable.rs

1pub use ptr_meta::DynMetadata;
2pub use ptr_meta::Pointee;
3pub use ptr_meta::from_raw_parts_mut;
4pub use ptr_meta::to_raw_parts_mut;
5
6/// Implements [`FromImpl`](crate::FromImpl) for all sized types implementing the specified trait.
7///
8/// ```
9/// # use trait_obj_list::impl_from_impl;
10/// trait MyTrait {}
11/// impl_from_impl!(dyn MyTrait);
12/// impl_from_impl!(dyn MyTrait + Send);
13/// impl_from_impl!(dyn MyTrait + Send + Sync);
14/// ```
15#[macro_export]
16macro_rules! impl_from_impl {
17	(dyn $($rest:tt)*) => {
18		#[allow(unused_parens)]
19		unsafe impl<'a, T> $crate::FromImpl<T> for (dyn $($rest)* + 'a)
20		where T: $($rest)* + 'a {
21			fn from_impl(value: &T) -> &Self { value }
22			fn from_impl_mut(value: &mut T) -> &mut Self { value }
23		}
24	};
25}
26
27impl_from_impl!(dyn core::any::Any);
28impl_from_impl!(dyn core::any::Any + Send);
29impl_from_impl!(dyn core::any::Any + Send + Sync);
30impl_from_impl!(dyn core::error::Error);
31impl_from_impl!(dyn core::error::Error + Send);
32impl_from_impl!(dyn core::error::Error + Send + Sync);