kserd_derive 0.1.0

Proc macro for Kurt's Self-Explanatory Rust Data
Documentation
#[macro_use]
extern crate kserd_derive;

use kserd::*;

#[test]
fn struct_with_fields() {
    #[derive(AsKserd)]
    struct Simple {
        a: u8,
        b: String,
    }

    let simple = Simple {
        a: 100,
        b: "Hello, world!".to_string(),
    };

    let kserd = simple.as_kserd();

    println!(
        "{}",
        kserd.as_str_with_config(format::FormattingConfig::default())
    );

    assert_eq!(kserd.id(), Some("Simple"));

    let map = match kserd.val() {
        Value::Cntr(map) => map,
        _ => unreachable!(),
    };

    assert_eq!(map.get(&("a".into())), Some(&(100u64.as_kserd())));
    assert_eq!(map.get(&("b".into())), Some(&("Hello, world!".as_kserd())));
}

#[test]
fn unit_struct() {
    #[derive(AsKserd)]
    struct AUnitStruct;

    let val = AUnitStruct;

    let kserd = val.as_kserd();

    println!(
        "{}",
        kserd.as_str_with_config(format::FormattingConfig::default())
    );

    assert_eq!(kserd.id(), Some("AUnitStruct"));
    assert_eq!(kserd.val(), &Value::Unit);
}