You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The bounded_integer! macro allows you to define your own bounded integer type, given a
specific (inclusive) range it inhabits. For example:
bounded_integer!{structMyInteger(0,7);}let num = MyInteger::new(5).unwrap();assert_eq!(num,5);
This macro supports both structs and enums. See the examples module for the
documentation of generated types.
Const generics-based bounded integers
You can also create ad-hoc bounded integers via types in this library that use const generics,
for example:
let num = <BoundedU8<0,7>>::new(5).unwrap();assert_eq!(num,5);
These integers are shorter to use as they don't require a type declaration or explicit name.
However due to the limits of const generics, they may not implement some traits –
namely [Default], bytemuck’s Zeroable and zerocopy’s FromZeros.
Also, unlike their macro counterparts they will not be subject to niche layout optimizations.
no_std
All the integers in this crate depend only on libcore and so work in #![no_std] environments.
Crate Features
By default, no crate features are enabled.
std: Interopate with std — implies alloc. Enables the following things:
serde1: Implement Serialize and Deserialize for the bounded integers, making sure all
values will never be out of bounds.
zerocopy: Implement IntoBytes and Immutable for all bounded integers,
Unaligned for ones backed by u8 or i8,
and FromZeros for suitable macro-generated ones.
step_trait: Implement the Step trait which allows the bounded integers to be easily used
in ranges. This will require you to use nightly and place #![feature(step_trait)] in your
crate root if you use the macro.