RS.CLIPPY.NON_ZERO_SUGGESTIONS
Suggests using `NonZero#` from `u#` or `i#` for more efficient and type-safe conversions
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: non_zero_suggestions. Copyright ©2025 The Rust Team. All rights reserved.
What it does
Checks for conversions from NonZero types to regular integer types,
and suggests using NonZero types for the target as well.
Why is this bad?
Converting from NonZero types to regular integer types and then back to NonZero
types is less efficient and loses the type-safety guarantees provided by NonZero types.
Using NonZero types consistently can lead to more optimized code and prevent
certain classes of errors related to zero values.
Example
use std::num::{NonZeroU32, NonZeroU64};
fn example(x: u64, y: NonZeroU32) {
// Bad: Converting NonZeroU32 to u64 unnecessarily
let r1 = x / u64::from(y.get());
let r2 = x % u64::from(y.get());
}
Use instead:
use std::num::{NonZeroU32, NonZeroU64};
fn example(x: u64, y: NonZeroU32) {
// Good: Preserving the NonZero property
let r1 = x / NonZeroU64::from(y);
let r2 = x % NonZeroU64::from(y);
}