use varihappy::{Tuple, Tuple1, Tuple2};
type HeadOf<T> = <T as Tuple1>::Item0;
type RestOf<T> = <<<<T as Tuple1>::Rest as Tuple>::Reversed as Tuple1>::Rest as Tuple>::Reversed;
type TailOf<T> = <<<T as Tuple1>::Rest as Tuple>::Reversed as Tuple1>::Item0;
fn split<T>(tuple: T) -> (HeadOf<T>, RestOf<T>, TailOf<T>)
where
T: Tuple2,
<<T as Tuple1>::Rest as Tuple>::Reversed: Tuple1,
{
let (head, rest) = tuple.split_into();
let (tail, rest) = rest.rev().split_into();
(head, rest.rev(), tail)
}
fn main() {
let (_head, _rest, _tail): (i32, (), &str) = split((42, "foo"));
let (_head, _rest, _tail): (i32, (f64, bool, ()), &str) = split((42, 12.3, false, (), "foo"));
}
|