trait-obj-list 0.1.2

List of unsized trait objects, stored in a flat array
Documentation
pub use ptr_meta::DynMetadata;
pub use ptr_meta::Pointee;
pub use ptr_meta::from_raw_parts_mut;
pub use ptr_meta::to_raw_parts_mut;

/// Implements [`FromImpl`](crate::FromImpl) for all sized types implementing the specified trait.
///
/// ```
/// # use trait_obj_list::impl_from_impl;
/// trait MyTrait {}
/// impl_from_impl!(dyn MyTrait);
/// impl_from_impl!(dyn MyTrait + Send);
/// impl_from_impl!(dyn MyTrait + Send + Sync);
/// ```
#[macro_export]
macro_rules! impl_from_impl {
	(dyn $($rest:tt)*) => {
		#[allow(unused_parens)]
		unsafe impl<'a, T> $crate::FromImpl<T> for (dyn $($rest)* + 'a)
		where T: $($rest)* + 'a {
			fn from_impl(value: &T) -> &Self { value }
			fn from_impl_mut(value: &mut T) -> &mut Self { value }
		}
	};
}

impl_from_impl!(dyn core::any::Any);
impl_from_impl!(dyn core::any::Any + Send);
impl_from_impl!(dyn core::any::Any + Send + Sync);
impl_from_impl!(dyn core::error::Error);
impl_from_impl!(dyn core::error::Error + Send);
impl_from_impl!(dyn core::error::Error + Send + Sync);