69 lines
2.3 KiB
Markdown
69 lines
2.3 KiB
Markdown
# nonmax
|
|
|
|
[](https://github.com/LPGhatguy/nonmax/actions)
|
|
[](https://crates.io/crates/nonmax)
|
|
[](https://docs.rs/nonmax)
|
|
|
|
nonmax provides types similar to the std `NonZero*` types, but instead requires
|
|
that their values are not the maximum for their type. This ensures that
|
|
`Option<NonMax*>` is no larger than `NonMax*`.
|
|
|
|
nonmax supports every type that has a corresponding non-zero variant in the
|
|
standard library:
|
|
|
|
* `NonMaxI8`
|
|
* `NonMaxI16`
|
|
* `NonMaxI32`
|
|
* `NonMaxI64`
|
|
* `NonMaxI128`
|
|
* `NonMaxIsize`
|
|
* `NonMaxU8`
|
|
* `NonMaxU16`
|
|
* `NonMaxU32`
|
|
* `NonMaxU64`
|
|
* `NonMaxU128`
|
|
* `NonMaxUsize`
|
|
|
|
### Example
|
|
|
|
```rust
|
|
use nonmax::{NonMaxI16, NonMaxU8};
|
|
|
|
let value = NonMaxU8::new(16).expect("16 should definitely fit in a u8");
|
|
assert_eq!(value.get(), 16);
|
|
assert_eq!(std::mem::size_of_val(&value), 1);
|
|
|
|
let signed = NonMaxI16::new(i16::min_value()).expect("minimum values are fine");
|
|
assert_eq!(signed.get(), i16::min_value());
|
|
assert_eq!(std::mem::size_of_val(&signed), 2);
|
|
|
|
let oops = NonMaxU8::new(255);
|
|
assert_eq!(oops, None);
|
|
```
|
|
|
|
### Features
|
|
|
|
* `std` (default): implements [`std::error::Error`] for [`ParseIntError`] and
|
|
[`TryFromIntError`]. Disable this feature for
|
|
[`#![no_std]`](https://rust-embedded.github.io/book/intro/no-std.html) support.
|
|
|
|
* `serde`: implements the `Serialize` and `Deserialize` traits from [`serde`](https://crates.io/crates/serde).
|
|
|
|
### Minimum Supported Rust Version (MSRV)
|
|
|
|
nonmax supports Rust 1.47.0 and newer. Until this library reaches 1.0,
|
|
changes to the MSRV will require major version bumps. After 1.0, MSRV changes
|
|
will only require minor version bumps, but will need significant justification.
|
|
|
|
## License
|
|
|
|
Licensed under either of
|
|
|
|
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
|
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
|
|
|
at your option.
|
|
|
|
### Contribution
|
|
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 dual licensed as above, without any additional terms or conditions.
|