Crate nan_default

Source
Expand description

§NaN Default Derive Macro

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.

§Example

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);
}

Derive Macros§

NanDefault