### 3 unstable releases

0.2.1 | May 16, 2021 |
---|---|

0.2.0 | May 16, 2021 |

0.1.0 | May 16, 2021 |

#**902** in Rust patterns

**21** downloads per month

**MIT/Apache**

28KB

468 lines

# bounded_types

Provides newtypes

, `BoundedI32`

, 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.`BoundedI64`

They are wrappers around a

, but implement traits like `Result`

and even ` PartialEq<{`Integer}

`>`

`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, comparisons always return `false`
`let` bounded_err`:` `BoundedI64``<`2, 10`>` `=` `11.``into``(``)``;`
`assert_eq!``(`bounded_err `==` `11``,` `false``)``;`
`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

## License

is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).`bounded_types`

See

and `LICENSE``-``APACHE`

for details.`LICENSE``-``MIT`

#### Dependencies

~0.7–1.3MB

~29K SLoC