1pub trait Arity {
3 fn arity() -> usize;
16}
17
18macro_rules! impl_tuple_arity {
19 ($len:expr, $($tuple_arg:ident),*) => {
20 impl<$($tuple_arg,)*> Arity for ($($tuple_arg,)*) {
21 #[inline(always)]
22 fn arity() -> usize {
23 $len
24 }
25 }
26 }
27}
28
29#[inline(always)]
40pub fn tuple_arity<T: Arity>(_: &T) -> usize {
41 T::arity()
42}
43
44
45impl_tuple_arity!(0,);
46impl_tuple_arity!(1, T1);
47impl_tuple_arity!(2, T1, T2);
48impl_tuple_arity!(3, T1, T2, T3);
49impl_tuple_arity!(4, T1, T2, T3, T4);
50impl_tuple_arity!(5, T1, T2, T3, T4, T5);
51impl_tuple_arity!(6, T1, T2, T3, T4, T5, T6);
52impl_tuple_arity!(7, T1, T2, T3, T4, T5, T6, T7);
53impl_tuple_arity!(8, T1, T2, T3, T4, T5, T6, T7, T8);
54impl_tuple_arity!(9, T1, T2, T3, T4, T5, T6, T7, T8, T9);
55impl_tuple_arity!(10, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
56impl_tuple_arity!(11, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
57impl_tuple_arity!(12, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);