use core::{
ffi::CStr,
mem,
ptr::{self, NonNull},
};
use crate::helper::valid_align::ValidAlign;
pub(crate) unsafe trait Aligned {
const ALIGN: ValidAlign;
const DANGLING_THIN: NonNull<()> = NonNull::new(ptr::invalid_mut(Self::ALIGN.get())).unwrap();
}
unsafe impl<T> Aligned for T {
const ALIGN: ValidAlign = ValidAlign::new(mem::align_of::<T>()).unwrap();
}
unsafe impl<T> Aligned for [T] {
const ALIGN: ValidAlign = ValidAlign::new(mem::align_of::<T>()).unwrap();
}
unsafe impl Aligned for str {
const ALIGN: ValidAlign = ValidAlign::new(mem::align_of_val("")).unwrap();
}
unsafe impl Aligned for CStr {
const ALIGN: ValidAlign = ValidAlign::new(mem::align_of_val(&
unsafe {
CStr::from_bytes_with_nul_unchecked(&[b'\0'])
}))
.unwrap();
}