checks

Adds several compile time checks for const generics.

Idea was based off of this reddit post.

Note: This library requires use of the #![feature(generic_const_exprs)] flag.

Usage:

```rust

![feature(genericconstexprs)]

/// Only allows for arguments of C to be alphabetic struct AlphabeticTest where checks::char::Alphabetic: checks::Passed;

// All letters are alphabetic, check passes. let pass = AlphabeticTest::<'a'>; // Compiles let pass = AlphabeticTest::<'B'>; // Compiles let pass = AlphabeticTest::<'c'>; // Compiles

// Letters are not alphabetic, check fails. let fail = AlphabeticTest::<'1'>; // Compile error! let fail = AlphabeticTest::<'&'>; // Compile error! let fail = AlphabeticTest::<'3'>; // Compile error! ```

Custom checks can be implemented as well: ```rust const fn isbinary(num: u8) -> bool { num == 0 || num == 1 } struct BinaryOnly where Check<{ isbinary(N) }>: Passed;

let pass = BinaryOnly::<0>; // Compiles let pass = BinaryOnly::<1>; // Compiles

let fail = BinaryOnly::<2>; // Compiler error! ```

Checks can also be defined with the check! macro, which will also generate documentation / tests for example input: ```rust check! { u8 => /// Matches all binary numbers (0, 1) Binary( passes: 0, 1 fails: 2, 3, 4 ): |N| (N == 0 || N == 1) }

struct BinaryOnly where Binary: Passed;

let pass = BinaryOnly::<0>; // Compiles let pass = BinaryOnly::<1>; // Compiles

let fail = BinaryOnly::<2>; // Compiler error! ```

Full list of provided checks can be found on the docs.rs page.