macro_rules! def_compat_traits {
{ $($CompatTrait:ident = $Trait:ty = $feature:literal),*$(,)? } => {$(
#[cfg(feature = $feature)]
pub use $Trait as $CompatTrait;
#[cfg(not(feature = $feature))]
pub trait $CompatTrait {}
#[cfg(not(feature = $feature))]
impl<T> $CompatTrait for T {}
)*};
}
def_compat_traits! {
Freeze = core::marker::Freeze = "freeze",
Thin = core::ptr::Thin = "thin",
}
pub mod bytemuck {
def_compat_traits! {
AnyBitPattern = bytemuck::AnyBitPattern = "bytemuck",
NoUninit = bytemuck::NoUninit = "bytemuck",
Pod = bytemuck::Pod = "bytemuck",
Zeroable = bytemuck::Zeroable = "bytemuck",
}
}
pub mod zerocopy {
def_compat_traits! {
FromBytes = zerocopy::FromBytes = "zerocopy",
FromZeros = zerocopy::FromZeros = "zerocopy",
Immutable = zerocopy::Immutable = "zerocopy",
IntoBytes = zerocopy::IntoBytes = "zerocopy",
KnownLayout = zerocopy::KnownLayout = "zerocopy",
}
}