stdx/
mem.rs

1use crate::sealed::Internal;
2
3#[doc(hidden)]
4pub trait OutputSize<A> {
5    type Output;
6
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            fn __internal(_: Internal) {}
19        }
20    };
21}
22
23impl_output_size!(());
24impl_output_size!((A0,));
25impl_output_size!((A0, A1,));
26impl_output_size!((A0, A1, A2,));
27impl_output_size!((A0, A1, A2, A3,));
28impl_output_size!((A0, A1, A2, A3, A4,));
29impl_output_size!((A0, A1, A2, A3, A4, A5,));
30impl_output_size!((A0, A1, A2, A3, A4, A5, A6,));
31impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7,));
32impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8,));
33impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9,));
34impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,));
35impl_output_size!((A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11,));
36
37#[inline]
38#[must_use]
39pub const fn output_size<F, A>(_: &F) -> usize
40where
41    F: OutputSize<A>,
42{
43    core::mem::size_of::<F::Output>()
44}