[−][src]Macro bounded_integer::bounded_integer
bounded_integer!() { /* proc-macro */ }Generate a bounded integer type.
It takes in single struct or enum, with the content being any range expression, which can be
inclusive or not. The attributes and visibility (e.g. pub) of the type are forwarded directly
to the output type. It also derives Debug, Hash, Clone, Copy, PartialEq, Eq,
PartialOrd and Ord.
The item must have a repr attribute to specify how it will be represented in memory, and it
must be a u* or i* type.
Examples
With a struct:
bounded_integer! { #[repr(i8)] pub struct S { -3..2 } }
The generated item should look like this:
#[derive(Debug, Hash, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub struct S(i8);
And the methods will ensure that -3 <= S.0 < 2.
With an enum:
bounded_integer! { #[repr(i8)] pub enum S { 5..=7 } }
The generated item should look like this:
#[derive(Debug, Hash, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[repr(i8)] pub enum S { P5 = 5, P6, P7 }
Limitations
- Both bounds of enum ranges must be closed and be a simple const expression involving only
literals and the following operators:
- Negation (
-x) - Addition (
x+y), subtraction (x-y), multiplication (x*y), division (x/y) and remainder (x%y). - Bitwise not (
!x), XOR (x^y), AND (x&y) and OR (x|y).
- Negation (