Skip to content

andogq/tuple-traits

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tuple-traits

Additional traits to enable some cursed ergonomic types.

crates.io docs.rs checks

Traits

Append a type to a tuple.

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

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)>
);

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!