rust_utils/
mem.rs

1use crate::sealed::Internal;
2
3pub trait OutputSize<A> {
4    type Output;
5
6    #[doc(hidden)]
7    fn __internal(_: Internal) {}
8}
9
10macro_rules! impl_output_size {
11    (($($ty:tt,)*)) => {
12        impl<$($ty,)* F, O> OutputSize<($($ty,)*)> for F
13        where
14            F: FnOnce($($ty,)*) -> O ,
15        {
16            type Output = O;
17        }
18    };
19}
20
21impl_output_size!(());
22impl_output_size!((A0,));
23impl_output_size!((A0, A1,));
24impl_output_size!((A0, A1, A2,));
25impl_output_size!((A0, A1, A2, A3,));
26impl_output_size!((A0, A1, A2, A3, A4,));
27impl_output_size!((A0, A1, A2, A3, A4, A5,));
28impl_output_size!((A0, A1, A2, A3, A4, A5, A6,));
29impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7,));
30impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8,));
31impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9,));
32impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,));
33impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11,));
34
35#[inline]
36#[must_use]
37pub const fn output_size<F, A>(_: &F) -> usize
38where
39    F: OutputSize<A>,
40{
41    core::mem::size_of::<F::Output>()
42}