#tuple #type #traits #cons #type-state #assert-eq

tuple-traits

Additional tuple traits to enable ergonomic types

2 releases

0.1.1 Nov 11, 2024
0.1.0 Nov 11, 2024

#1115 in Rust patterns

Download history 250/week @ 2024-11-11 12/week @ 2024-11-18 17/week @ 2024-12-02 15/week @ 2024-12-09

54 downloads per month

MIT license

11KB
86 lines

tuple-traits

Additional traits to enable some cursed ergonomic types.

crates.io docs.rs checks

Traits

Append

Append a type to a tuple.

static_assertions::assert_type_eq_all!(
    <(usize, char) as tuple_traits::Append>::Append<bool>,
    (usize, char, bool)
);

Cons

Represent a tuple as a cons (ish) value, with the first value on the left, and the rest of the tuple on the right.

static_assertions::assert_impl_all!(
    (usize, usize, usize): tuple_traits::Cons<Left = usize, Right = (usize, usize)>
);

Contains

A trait that will only be implement for a given target if it is present within a given type.

struct A;
struct B;
struct C;

fn requires_c<T, Index>(value: T)
where
    T: tuple_traits::Contains<C, Index>
{
}

// Works!
requires_c((A, B, C));

// Compiler error: `C` does not appear within `(A, B)`
// requires_c((A, B));

Example

Check out ./examples/buffer-flags.rs for a full example!

No runtime deps