fieldx 0.2.3

Procedural macro for constructing structs with lazily initialized fields, builder pattern, and serde support with a focus on declarative syntax.
Documentation
#![cfg(feature = "sync")]
#![deny(dead_code)]

mod inner {
    use fieldx::fxstruct;

    #[fxstruct(sync)]
    pub struct Foo {
        #[fieldx(get(copy), set, clearer, predicate,
            // reader + attributes_fn + deny(dead_code) are ensuring that attributes_fn are applied to the reader.
            reader, attributes_fn(allow(dead_code)))]
        v: u32,
    }
}

#[test]
fn base() {
    let foo = inner::Foo::new();

    assert!(!foo.has_v(), "field is initially unset");
    assert_eq!(foo.v(), None, "initially is None");
    foo.set_v(42);
    assert!(foo.has_v(), "field is set");
    assert_eq!(foo.v(), Some(42), "is 42");
    foo.clear_v();
    assert_eq!(foo.v(), None, "cleared");
}