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