meta_tuple/
into.rs

1use crate::{MetaTuple, meta_tuple};
2
3/// A trait that converts a more user friendly concrete type into a [`MetaTuple`].
4///
5/// By default this is implemented on static tuples.
6pub trait IntoMetaTuple {
7    fn into_meta_tuple(self) -> impl MetaTuple;
8}
9
10impl<T> IntoMetaTuple for T
11where
12    T: MetaTuple,
13{
14    fn into_meta_tuple(self) -> impl MetaTuple {
15        self
16    }
17}
18
19macro_rules! impl_tuple {
20    ($($T: ident),*) => {
21        #[allow(non_snake_case)]
22        impl<$($T: 'static,)*> IntoMetaTuple for ($($T,)*) {
23            fn into_meta_tuple(self) -> impl MetaTuple {
24                let ($($T,)*) = self;
25                meta_tuple!($($T,)*)
26            }
27        }
28    };
29}
30
31impl_tuple!(A);
32impl_tuple!(A, B);
33impl_tuple!(A, B, C);
34impl_tuple!(A, B, C, D);
35impl_tuple!(A, B, C, D, E);
36impl_tuple!(A, B, C, D, E, F);
37impl_tuple!(A, B, C, D, E, F, G);
38impl_tuple!(A, B, C, D, E, F, G, H);
39impl_tuple!(A, B, C, D, E, F, G, H, I);
40impl_tuple!(A, B, C, D, E, F, G, H, I, J);
41impl_tuple!(A, B, C, D, E, F, G, H, I, J, K);
42impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L);