mod test;
use core::mem::MaybeUninit;
use core::slice;
use oct::{
FromOctets,
Immutable,
Init,
transmute_mut,
transmute_ref,
};
#[doc(alias = "IntoBytes")]
pub unsafe trait IntoOctets {
#[doc(alias = "as_bytes")]
#[inline]
#[must_use]
fn as_octets(&self) -> &[u8]
where
Self: Init + Immutable,
{
transmute_ref::<Self, [u8]>(self)
}
#[doc(alias = "as_bytes_mut")]
#[doc(alias = "as_mut_bytes")]
#[doc(alias = "as_mut_octets")]
#[inline]
#[must_use]
fn as_octets_mut(&mut self) -> &mut [u8]
where
Self: Init + FromOctets,
{
transmute_mut::<Self, [u8]>(self)
}
#[inline]
#[must_use]
fn as_uninit_octets(&self) -> &[MaybeUninit<u8>]
where
Self: Immutable,
{
let len = size_of_val(self);
let data = (&raw const *self).cast::<MaybeUninit<u8>>();
debug_assert!(data.is_aligned());
unsafe { slice::from_raw_parts(data, len) }
}
}
unsafe impl<T: ?Sized> IntoOctets for T {}