eure-macros 0.1.9

Derive macros for Eure schema generation
Documentation
use eure::FromEure;

#[derive(Debug, PartialEq, FromEure)]
#[eure(crate = ::eure::document)]
struct User {
    name: String,
    age: i32,
}

#[derive(Debug, PartialEq, FromEure)]
#[eure(crate = ::eure::document)]
struct Unit;

#[derive(Debug, PartialEq, FromEure)]
#[eure(crate = ::eure::document)]
struct Point(i32, i32);

#[derive(Debug, PartialEq, FromEure)]
#[eure(crate = ::eure::document)]
struct Name(String);

#[test]
fn test_parse_named_struct() {
    use eure::eure;
    let doc = eure!({ name = "Alice", age = 30 });
    assert_eq!(
        doc.parse::<User>(doc.get_root_id()).unwrap(),
        User {
            name: "Alice".to_string(),
            age: 30
        }
    );
}

#[test]
fn test_parse_unit_struct() {
    use eure::eure;
    let doc = eure!({ = () });
    assert_eq!(doc.parse::<Unit>(doc.get_root_id()).unwrap(), Unit);
}

#[test]
fn test_parse_tuple_struct() {
    use eure::eure;
    let doc = eure!({ = (10, 20) });
    assert_eq!(
        doc.parse::<Point>(doc.get_root_id()).unwrap(),
        Point(10, 20)
    );
}

#[test]
fn test_parse_newtype_struct() {
    use eure::eure;
    let doc = eure!({ = "Bob" });
    assert_eq!(
        doc.parse::<Name>(doc.get_root_id()).unwrap(),
        Name("Bob".to_string())
    );
}

#[test]
fn test_parse_named_struct_unknown_field_error() {
    use eure::eure;
    let doc = eure!({ name = "Alice", age = 30, extra = "field" });
    let result = doc.parse::<User>(doc.get_root_id());
    assert!(result.is_err());
}