An open API service indexing awesome lists of open source software.

https://github.com/andogq/tuple-traits

Additional tuple traits to enable ergonomic types.
https://github.com/andogq/tuple-traits

blazingly-fast cons ergonomic rust trait tuples types typestate

Last synced: 29 days ago
JSON representation

Additional tuple traits to enable ergonomic types.

Awesome Lists containing this project

README

        


tuple-traits


Additional traits to enable some cursed ergonomic types.



crates.io
docs.rs
checks

# Traits

## [`Append`](https://docs.rs/tuple-traits/latest/tuple-traits/trait.Append.html)

Append a type to a tuple.

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

## [`Cons`](https://docs.rs/tuple-traits/latest/tuple-traits/trait.Cons.html)

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

```rust
static_assertions::assert_impl_all!(
(usize, usize, usize): tuple_traits::Cons
);
```

## [`Contains`](https://docs.rs/tuple-traits/latest/tuple-traits/trait.Contains.html)

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

```rust
struct A;
struct B;
struct C;

fn requires_c(value: T)
where
T: tuple_traits::Contains
{
}

// 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`](./examples/buffer-flags.rs) for a full example!