use crate::TransmuteErr;
pub trait ToTransmute
where
Self: Sized,
{
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
unsafe fn try_transmute_or_panic<To>(self) -> To;
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
unsafe fn try_transmute<To>(self) -> Result<To, TransmuteErr<Self>>;
unsafe fn transmute_unchecked<To>(self) -> To;
}
impl<T> ToTransmute for T
where
T: Sized,
{
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
#[cfg_attr(
all(feature = "transmute-inline", not(feature = "transmute-inline-always")),
inline
)]
#[cfg_attr(feature = "transmute-inline-always", inline(always))]
unsafe fn try_transmute_or_panic<To>(self) -> To {
unsafe { crate::try_transmute_or_panic(self) }
}
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
#[cfg_attr(
all(feature = "transmute-inline", not(feature = "transmute-inline-always")),
inline
)]
#[cfg_attr(feature = "transmute-inline-always", inline(always))]
unsafe fn try_transmute<To>(self) -> Result<To, TransmuteErr<Self>> {
unsafe { crate::try_transmute(self) }
}
#[cfg_attr(
all(feature = "transmute-inline", not(feature = "transmute-inline-always")),
inline
)]
#[cfg_attr(feature = "transmute-inline-always", inline(always))]
unsafe fn transmute_unchecked<To>(self) -> To {
unsafe { crate::raw::transmute_unchecked(self) }
}
}