19 releases
0.4.1 | Jul 16, 2024 |
---|---|
0.4.0-beta.2 | May 5, 2024 |
0.3.3 | Mar 8, 2024 |
0.3.2 | Oct 16, 2023 |
0.2.2 | Jul 31, 2023 |
#699 in Rust patterns
244 downloads per month
14KB
nz
Table of contents
Description
The nz
crate provides a collection of macros that simplify the creation
of the NonZero
type. With these macros, you can easily generate constants
of the generic type using literals, constant values or expressions at
compiletime.
Changelog
All changes to nz
crate are documented in CHANGELOG.md.
Features
- No unsafe code
- No dependencies
no_std
compatible- Supports every type that implements
ZeroablePrimitive
- Compile-time evaluation
Macros
Usage
use std::num::NonZero;
// A `NonZero<T>` type can be constructed from different types of
// arguments with the matching `nz` macro.
// Such argument can be an integer literal,
const NZ_MIN: NonZero<u8> = nz::u8!(1);
let nz_two = nz::u8!(2);
// a constant value,
const NZ_MAX: NonZero<u8> = nz::u8!(u8::MAX);
const SIX: u8 = 6;
let six = nz::u8!(SIX);
// or even a constant expression.
const RES: NonZero<u8> = nz::u8!({ 3 + 7 } - NZ_MIN.get());
let res = nz::u8!((NZ_MIN.get() & NZ_MAX.get()) + 7);
let five = nz::u8!({ const FIVE: u8 = 5; FIVE });
// However, a non-constant expression results in a compile-time error.
// const __ERR: NonZero<u8> = nz::u8!({ 3 + 7 } - nz_two.get());
License
This library is distributed under the terms of either of the following licenses at your option: