#![allow(non_snake_case)]
#![allow(clippy::tabs_in_doc_comments)]
#![allow(clippy::needless_doctest_main)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(not(feature = "stderr"), no_std)]
#[cfg_attr(docsrs, doc(cfg(feature = "compatible_stdapi")))]
#[cfg(any(test, feature = "compatible_stdapi"))]
pub mod mem {
pub use crate::raw::transmute_unchecked;
pub use crate::try_transmute_or_panic as transmute;
}
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
pub mod err;
mod raw;
#[cfg_attr(docsrs, doc(cfg(feature = "to")))]
#[cfg(any(test, feature = "to"))]
pub mod to;
#[cfg_attr(docsrs, doc(cfg(feature = "contract")))]
#[cfg(any(test, feature = "contract"))]
pub mod contract;
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
use crate::err::TransmuteErr;
pub use crate::raw::transmute_unchecked;
#[track_caller]
#[cfg_attr(
all(feature = "transmute-inline", not(feature = "transmute-inline-always")),
inline
)]
#[cfg_attr(feature = "transmute-inline-always", inline(always))]
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
pub const unsafe fn try_transmute_or_panic<D, To>(in_data: D) -> To {
use crate::err::TransmuteErrKind;
pub use crate::raw::transmute_unchecked;
use core::mem::size_of;
{
let size_d = size_of::<D>();
let size_to = size_of::<To>();
if size_d != size_to {
let errkind = TransmuteErrKind::size_mismatch(size_d, size_to);
errkind.unwrap();
}
}
unsafe { transmute_unchecked(in_data) }
}
#[cfg_attr(
all(feature = "transmute-inline", not(feature = "transmute-inline-always")),
inline
)]
#[cfg_attr(feature = "transmute-inline-always", inline(always))]
#[cfg_attr(docsrs, doc(cfg(feature = "try_transmute")))]
#[cfg(any(test, feature = "try_transmute"))]
pub const unsafe fn try_transmute<D, To>(in_data: D) -> Result<To, TransmuteErr<D>> {
pub use crate::raw::transmute_unchecked;
use core::mem::size_of;
{
let size_d = size_of::<D>();
let size_to = size_of::<To>();
if size_d != size_to {
let err = TransmuteErr::size_mismatch(size_d, size_to, in_data);
return Err(err);
}
}
Ok(unsafe { transmute_unchecked(in_data) })
}