use super::{Init, TypeFn};
pub type AlignedStorage<const LEN: usize, const ALIGN: usize> =
<AlignedStorageFn<LEN, ALIGN> as TypeFn>::Output;
#[doc(hidden)]
pub struct AlignedStorageFn<const LEN: usize, const ALIGN: usize>;
#[doc(hidden)]
pub mod aligned_storage_0b1 {
macro_rules! impl_aligned_storage_fn {
($align:tt, $($rest:tt)*) => {
use super::{TypeFn, Init, AlignedStorageFn};
impl<const LEN: usize> TypeFn for AlignedStorageFn<LEN, $align> {
type Output = Bytes<LEN>;
}
#[repr(align($align))]
#[derive(Clone, Copy)]
pub struct Bytes<const LEN: usize>(pub [u8; LEN]);
impl<const LEN: usize> Init for Bytes<LEN> {
const INIT: Self = Self([0; LEN]);
}
pub mod _0 {
impl_aligned_storage_fn! { $($rest)* }
}
};
() => {};
}
impl_aligned_storage_fn! {
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,
}
}