pub trait Append {
type Append<T>;
}
macro_rules! impl_tuples {
() => {
impl Append for () {
type Append<T> = (T,);
}
};
($T:ident $(, $($Tail:ident),* )?) => {
impl<$T, $($($Tail),*)?> Append for ($T, $($($Tail),*)?) {
type Append<T> = ($T, $($($Tail,)*)? T);
}
impl_tuples!($($($Tail),*)?);
};
}
crate::tuple_list!(impl_tuples);
#[cfg(test)]
mod test {
use static_assertions::assert_type_eq_all;
use super::*;
assert_type_eq_all!(<() as Append>::Append<usize>, (usize,));
assert_type_eq_all!(<(bool,) as Append>::Append<usize>, (bool, usize));
assert_type_eq_all!(<(bool, char) as Append>::Append<usize>, (bool, char, usize));
}