struct-mapper 0.2.0

Derive macro to auto-generate From<Source> for Target by mapping struct fields — zero boilerplate struct conversion
Documentation
use struct_mapper::TryMapFrom;

struct Source {
    count: i64,
    name: String,
}

#[derive(Debug, TryMapFrom)]
#[try_map_from(Source)]
struct Target {
    #[map(try_into)]
    count: u32,
    name: String,
}

#[test]
fn try_into_success() {
    let src = Source {
        count: 42,
        name: "Alice".into(),
    };
    let target: Target = src.try_into().unwrap();
    assert_eq!(target.count, 42);
    assert_eq!(target.name, "Alice");
}

#[test]
fn try_into_failure_negative() {
    let src = Source {
        count: -1,
        name: "Bob".into(),
    };
    let result = Target::try_from(src);
    assert!(result.is_err());
    let err = result.unwrap_err();
    assert_eq!(err.field, "count");
}

#[test]
fn try_into_failure_overflow() {
    let src = Source {
        count: i64::from(u32::MAX) + 1,
        name: "Charlie".into(),
    };
    let result = Target::try_from(src);
    assert!(result.is_err());
}