Ranged integer types and math for Rust
Do you ever need to restrict a u8 from 0 to 100 or restrict any other integer
type to any other range? Then this crate is for you! The ranges are encoded in
the type system, so you only need to validate the range once (and it can even be
at compile time!). This crate is sort of like a combination of similar crates
deranged and ux.
This crate heavily leverages the type system to allow for powerful ranged
integer mathematics, covering arbitrary i{N} / u{N} types, unit integers,
non-zero divisions, and const operations. Enable the serde feature for
range-validated deserialization / serialization (implements Serialize and
Deserialize for Ranged* types).
Check out the documentation for examples.
- Compile-time and runtime checked constructors for ranged integers
- Strict, checked, saturating, constant, and ranged operations
- Conversions between for ranged integers
- Aliases for arbitrary width integers, unit integers, and ASCII types
- Optional crate support
The current MSRV is Rust 1.85.
Any future MSRV updates will follow the Ardaku MSRV guidelines.
Copyright © 2025-2026 The Ranch Contributors.
Licensed under any of
- Apache License, Version 2.0, (LICENSE_APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- Boost Software License, Version 1.0, (LICENSE_BOOST or https://www.boost.org/LICENSE_1_0.txt)
- MIT License, (LICENSE_MIT or https://mit-license.org/)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as described above, without any additional terms or conditions.
If you want help using or contributing to this library, feel free to send me an email at aldaronlau@gmail.com.