5 unstable releases
0.3.0 | Jun 29, 2022 |
---|---|
0.2.0 | Jun 29, 2022 |
0.1.2 | Jun 28, 2022 |
0.1.1 | Jun 27, 2022 |
0.1.0 | Jun 27, 2022 |
#14 in #structural
544 downloads per month
10KB
137 lines
Structural operations for Tuples
This crate implements three operations for tuples:
- join
- split
- index
For example, you can simply concatenate two tuples with:
use tuplestructops::TupleJoin;
let concat = (1, 'b', 3).join(('a', 5, 'c'));
This crate focuses purely on the overall structure of tuples, and is completely agnostic to the types of their elements.
The implementations are O(N^2) in the number of tuple elements. By default they're implemented for up to 16 elements, but the additional
- tuple_24
- tuple_32
features allow the traits to be implemented for more elements.
The impl_docs
feature enables documentation of the trait implementations for
all the tuple types. It is disabled by default since it's very repetitive.
lib.rs
:
Structural operations for tuples
This crate implements splitting and joining tuples.
The traits are implemented for tuples from zero len (ie, ()
unit) to 16.
(More with with the tuple_24
and tuple_32
features enabled.)
They are implemented for both tuples by value and reference, which either consume or borrow their inputs respectively.
An example of TupleJoin
by value:
use tuplestructops::TupleJoin;
let out = (1,'a',"b").join((1., 2.));
println!("out {out:?}");
TupleSplit
does the converse. It relies on pattern matching to determine
the split.
use tuplestructops::TupleSplit;
let out: (_, (_,_,_)) = (1,2,3,4,5).split();
println!("out {out:?}");