struct-metadata 1.3.0

Macros for attaching metadata to structs.
Documentation
use struct_metadata::{Described, Kind};


#[allow(dead_code)]
#[derive(serde::Deserialize, Described)]
struct FieldDefaults {
    #[serde(default)]
    has_default: u64,
    #[serde(default="make_number")]
    also_has_default: u64,
    no_default: u64,
}

fn make_number() -> u64 { 10 }

#[allow(dead_code)]
#[derive(serde::Deserialize, Described, Default)]
#[serde(default)]
struct StructDefault {
    #[serde(default)]
    double_default: u64,
    has_default: u64,
}


#[test]
fn default_defined() {
    let data = FieldDefaults::metadata();
    let Kind::Struct{ name, children} = data.kind else { panic!() };
    assert_eq!(name, "FieldDefaults");
    
    assert_eq!(children[0].label, "has_default");
    assert!(children[0].has_default);

    assert_eq!(children[1].label, "also_has_default");
    assert!(children[1].has_default);

    assert_eq!(children[2].label, "no_default");
    assert!(!children[2].has_default);


    let data = StructDefault::metadata();
    let Kind::Struct{ name, children} = data.kind else { panic!() };
    assert_eq!(name, "StructDefault");
    
    assert_eq!(children[0].label, "double_default");
    assert!(children[0].has_default);

    assert_eq!(children[1].label, "has_default");
    assert!(children[1].has_default);
}