use crate::Unaligned;
#[repr(u8)]
#[derive(Debug, Default, Copy)]
pub(super) enum OptUnaligned<T> {
#[default]
None,
Some(Unaligned<T>),
}
impl<T: Copy> Clone for OptUnaligned<T> {
fn clone(&self) -> Self {
*self
}
}
impl<T> OptUnaligned<T> {
pub(super) const fn some(value: T) -> Self {
Self::Some(Unaligned::new(value))
}
pub(super) fn into_option(self) -> Option<Unaligned<T>> {
match self {
Self::Some(v) => Some(v),
Self::None => None,
}
}
pub(super) fn as_option_mut(&mut self) -> Option<&mut Unaligned<T>> {
match self {
Self::Some(v) => Some(v),
Self::None => None,
}
}
pub(super) unsafe fn project_ptr(this: *mut Self) -> *mut T {
unsafe { this.cast::<u8>().add(1).cast() }
}
}