#![no_std]
#![doc = include_str!("../README.md")]
pub use extern_trait_impl::*;
#[doc(hidden)]
#[derive(Clone, Copy)]
#[repr(C)]
pub struct Repr(
*mut (),
*mut (),
core::marker::PhantomData<(
&'static mut (),
core::cell::UnsafeCell<()>,
core::marker::PhantomPinned,
)>,
);
const _: () = assert!(size_of::<Repr>() == size_of::<usize>() * 2);
impl Repr {
#[doc(hidden)]
#[inline]
pub unsafe fn from_value<T: Sized>(value: T) -> Self {
const { assert!(size_of::<T>() <= size_of::<Repr>()) };
let mut repr = core::mem::MaybeUninit::<Repr>::zeroed();
unsafe {
core::ptr::write(repr.as_mut_ptr().cast::<T>(), value);
repr.assume_init()
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn into_value<T: Sized>(self) -> T {
const { assert!(size_of::<T>() <= size_of::<Repr>()) };
unsafe { core::ptr::read((&self as *const Repr).cast::<T>()) }
}
}
#[doc(hidden)]
pub mod __private {
#[doc(hidden)]
pub use typeid::ConstTypeId;
}