Crate checks

Crate checks 

Source
Expand description

§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:

#![feature(generic_const_exprs)]

/// Only allows for arguments of `C` to be alphabetic
struct AlphabeticTest<const C: char>
where 
    checks::char::Alphabetic<C>: 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:

const fn is_binary(num: u8) -> bool { num == 0 || num == 1 }
struct BinaryOnly<const N: u8> 
where
    Check<{ is_binary(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:

check! { u8 =>
    /// Matches all binary numbers (0, 1)
    Binary(
        passes: 0, 1
        fails: 2, 3, 4
    ): |N| (N == 0 || N == 1)
}

struct BinaryOnly<const N: u8>
where
    Binary<N>: 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.

Modules§

bool
char
i8
i16
i32
i64
i128
isize
u8
u16
u32
u64
u128
usize

Macros§

check
Defines a new check, and also generates docs/tests for example input of the check.

Enums§

Check
The base check, which matches Passed when E is true, and Failed when E is false.

Traits§

Conclusion
Used to match the result of a check.
Failed
Indicates that a check has failed.
Passed
Indicates that a check has passed.