Crates.io | nan-default |
lib.rs | nan-default |
version | 0.0.1 |
created_at | 2025-08-17 04:32:17.349814+00 |
updated_at | 2025-08-17 04:32:17.349814+00 |
description | Derive macro for defaulting structs with floats to NAN |
homepage | |
repository | https://gitlab.com/mfairman/nan-default |
max_upload_size | |
id | 1799124 |
size | 9,601 |
A macro which lets you create structs whose floating-point members
(f32, f64) are initialized as NAN
rather than 0.0
by default.
Struct members which are not floats get Default::default()
assignments, and partial defaulting via ..Default::default()
is
also supported.
This can be convenient when using the special NAN state of a
floating point number to designate it as invalid or uninitialized,
rather than wrapping it in an Option
which takes some extra
space — especially if you have many of them. Of course, any
operations on such variables need to check for this state just as
they would need to check for the Some
variant of an Option
(albeit without idiomatic if-let statements, mapping, and so on).
Depending on the application, is_nan()
or !is_finite()
may be
appropriate functions to perform the check.
use nan_default::NanDefault;
#[derive(NanDefault)]
struct Data {
a: f32,
b: [f64; 10],
c: i32,
}
fn basic() {
let data = Data::default();
assert!(data.a.is_nan());
assert!(data.b[9].is_nan());
assert_eq!(data.c, 0);
}