Macro nonzero_ext::nonzero

source ·
macro_rules! nonzero {
    ($n:expr) => { ... };
}
Expand description

Create non-zero values from constant literals easily.

This macro issues a compile-time check and, if it passes, creates the corresponding non-zero numeric value from the given constant. Since the type of constant literals needs to be exactly known, nonzero! requires that you annotate the constant with the type, so instead of nonzero!(20) you must write nonzero!(20 as u16).

Note that this macro only works with integer literals, it isn’t possible to use the nonzero! macro with types other than the built-in ones.

§Determining the output type

Use a suffix on the input value to determine the output type: nonzero!(1_usize) will return a NonZeroUsize, and nonzero!(-1_i32) will return a NonZeroI32.

§Const expressions

This macro can be used in const expressions.

§Examples

nonzero!(20usize);  // => NonZeroUsize
nonzero!(20u32);    // => NonZeroU32
nonzero!(20 as u8); // => NonZeroU8

and passing a zero of any type will fail:

# #[macro_use]
# extern crate nonzero_ext;
# fn main() {
nonzero!(0u8);
# }