Crate bounded_types

Source
Expand description

Provides newtypes BoundedI32, BoundedI64, etc. which behave similar to their raw counterparts, but guarantee that the value is within a range that you specify. In contrast to other crates like this, these types are implemented using the newly stabilized const generics feature, which allows for simplifications that make the use of this type more intuitive and idiomatic.

They are wrappers around a Result, but implement traits like PartialEq<{Integer}> and even Ord<{Integer}> that make them act like integers in many ways. Some traits (like Add, for example) are intentionally not implemented, since those would be invalid on out-of-bounds values.

§Example

use bounded_types::BoundedI64;

// If an in-bounds value is stored, comparisons behave like you would expect.
let bounded_ok: BoundedI64<2, 10> = 5.into();

assert!(bounded_ok == 5);
assert!(bounded_ok >= 5);
assert!(bounded_ok >= 4);
// you can compare with any integer
assert!(bounded_ok < 100);
assert!(bounded_ok > -100);

// If an out-of-bounds value is stored, equal-checks and unequality-checks always return `false`. unequal-checks return true because ne() has to be the inverse of eq().
let bounded_err: BoundedI64<2, 10> = 11.into();

assert_eq!(bounded_err == 11, false);
assert_eq!(bounded_err != 11, true);
assert_eq!(bounded_err > 5, false);

§Memory use

use bounded_types::*;
use std::mem::size_of;
assert!(size_of::<Option<i8>>() == size_of::<BoundedI8<0, 10>>());
assert!(size_of::<Option<i16>>() == size_of::<BoundedI16<0, 10>>());
assert!(size_of::<Option<i32>>() == size_of::<BoundedI32<0, 10>>());
assert!(size_of::<Option<i64>>() == size_of::<BoundedI64<0, 10>>());
assert!(size_of::<Option<i128>>() == size_of::<BoundedI128<0, 10>>());
// etc. you get the idea

Structs§

BoundedI8
An i8 element that is forced to be within the inclusive range MIN..=MAX.
BoundedI16
An i16 element that is forced to be within the inclusive range MIN..=MAX.
BoundedI32
An i32 element that is forced to be within the inclusive range MIN..=MAX.
BoundedI64
An i64 element that is forced to be within the inclusive range MIN..=MAX.
BoundedI128
An i128 element that is forced to be within the inclusive range MIN..=MAX.
BoundedIsize
An isize element that is forced to be within the inclusive range MIN..=MAX.
BoundedU8
An u8 element that is forced to be within the inclusive range MIN..=MAX.
BoundedU16
An u16 element that is forced to be within the inclusive range MIN..=MAX.
BoundedU32
An u32 element that is forced to be within the inclusive range MIN..=MAX.
BoundedU64
An u64 element that is forced to be within the inclusive range MIN..=MAX.
BoundedU128
An u128 element that is forced to be within the inclusive range MIN..=MAX.
BoundedUsize
An usize element that is forced to be within the inclusive range MIN..=MAX.