Crate nz

Source
Expand description

§nz

github crates.io docs.rs msrv

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 compile time.

§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 the ZeroablePrimitive marker trait
  • 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());

Macros§

i8
Creates a NonZero<i8> from a literal, a constant value or expression that evaluates to i8.
i16
Creates a NonZero<i16> from a literal, a constant value or expression that evaluates to i16.
i32
Creates a NonZero<i32> from a literal, a constant value or expression that evaluates to i32.
i64
Creates a NonZero<i64> from a literal, a constant value or expression that evaluates to i64.
i128
Creates a NonZero<i128> from a literal, a constant value or expression that evaluates to i128.
isize
Creates a NonZero<isize> from a literal, a constant value or expression that evaluates to isize.
u8
Creates a NonZero<u8> from a literal, a constant value or expression that evaluates to u8.
u16
Creates a NonZero<u16> from a literal, a constant value or expression that evaluates to u16.
u32
Creates a NonZero<u32> from a literal, a constant value or expression that evaluates to u32.
u64
Creates a NonZero<u64> from a literal, a constant value or expression that evaluates to u64.
u128
Creates a NonZero<u128> from a literal, a constant value or expression that evaluates to u128.
usize
Creates a NonZero<usize> from a literal, a constant value or expression that evaluates to usize.