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

#13 in #structural

Download history 38/week @ 2024-01-01 22/week @ 2024-01-08 35/week @ 2024-01-15 82/week @ 2024-01-22 86/week @ 2024-01-29 77/week @ 2024-02-05 82/week @ 2024-02-12 69/week @ 2024-02-19 74/week @ 2024-02-26 123/week @ 2024-03-04 124/week @ 2024-03-11 129/week @ 2024-03-18 44/week @ 2024-03-25 95/week @ 2024-04-01 66/week @ 2024-04-08 43/week @ 2024-04-15

250 downloads per month

MIT/Apache

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:?}");

Dependencies