mod test;
use crate::{FromOcts, Immutable, Init};
use core::mem::MaybeUninit;
use core::slice;
pub unsafe trait IntoOcts {
#[inline(always)]
#[must_use]
fn as_octs(&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) }
}
#[inline(always)]
#[must_use]
fn as_octs_mut(&mut self) -> &mut [u8]
where
Self: Init + FromOcts,
{
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_octs(&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) }
}
#[inline]
fn swap_octs(&mut self)
where
Self: Init + FromOcts,
{
let octs = self.as_octs_mut();
octs.reverse();
}
}
unsafe impl<T: ?Sized> IntoOcts for T {}