tupley-0.0.13 has been yanked.
tupley
Intro
Extension for primitive tuple (Hlist based on recursive structure).
You could use it to contain elements with different types
Struct
Basic structure:
; // NonEmpty Tuple
let t = tup!;
// Tuple(1, Tuple(2.0, Tuple(false, Unit)))
Usage
- create new tuple:
let t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
- check empty:
let t = tup!;
assert!;
let t = tup!;
assert!;
- pass on type:
let t = >default;
// let t: tup_t!(i32, &str, bool) = Default::default();
assert_eq!;
- pattern macth:
let t = tup!;
let tup_pat! = t;
let t = tup!;
let tup_pat! = t;
assert_eq!;
let t = tup!;
let tup_pat! = t;
assert_eq!;
assert_eq!;
assert_eq!;
// don't match anything
let t = tup!;
let tup_pat! = t;
let t = tup!;
let tup_pat! = t;
assert_eq!;
assert_eq!;
assert_eq!; // match the rest all
- get length of every tuple:
let t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
- add/combine two tuples into one (or pushing back/front new element)
let t1 = tup!;
let t2 = tup!;
let t = t1 + t2;
assert_eq!;
let t = tup!;
let t = t.push_back;
let t = t.push_back;
let t = t.push_back;
assert_eq!;
let t = tup!;
let t = t.push_front;
let t = t.push_front;
let t = t.push_front;
assert_eq!;
- functor map
as_ref/as_mut/to_some/to_ok:
let t = tup!;
assert_eq!;
let mut t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
let t = tup!;
assert_eq!;
- check length in compile-time for tuples passed in (using const generics):
let t = tup!;
eq_yes;
gt_yes_1;
gt_yes_2;
// The following will failed in compile time
// fn gt_err<T: TupleLenGt<4>>(_: T) {} gt_err(t);
// fn eq_err<T: TupleLenEq<2>>(_: T) {} eq_err(t);
More work WIP.