tuple-traits

Crates.iotuple-traits
lib.rstuple-traits
version0.1.1
sourcesrc
created_at2024-11-11 09:23:46.584904
updated_at2024-11-11 10:03:48.668165
descriptionAdditional tuple traits to enable ergonomic types.
homepage
repositoryhttps://github.com/andogq/tuple-traits
max_upload_size
id1443614
size15,163
Tom Anderson (andogq)

documentation

README

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!

Commit count: 8

cargo fmt