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

Download history 128/week @ 2024-03-17 44/week @ 2024-03-24 96/week @ 2024-03-31 64/week @ 2024-04-07 44/week @ 2024-04-14 112/week @ 2024-04-21 159/week @ 2024-04-28 81/week @ 2024-05-05 83/week @ 2024-05-12 198/week @ 2024-05-19 51/week @ 2024-05-26 107/week @ 2024-06-02 50/week @ 2024-06-09 32/week @ 2024-06-16 89/week @ 2024-06-23

178 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