prae 0.8.4

A crate that aims to provide a better way to define types that require validation
Documentation
use assert_matches::assert_matches;
use prae::Wrapper;

prae::define! {
    #[derive(Debug)]
    pub Username: String;
    adjust |u| *u = u.trim().to_owned();
    ensure |u| !u.is_empty();
}

#[test]
fn construction_fails_for_invalid_data() {
    assert_matches!(Username::new("  "), Err(prae::ConstructionError { .. }))
}

#[test]
fn construction_succeeds_for_valid_data() {
    let un = Username::new(" user ").unwrap();
    assert_eq!(un.get(), "user");
}

#[test]
fn mutation_fails_for_invalid_data() {
    let mut un = Username::new("user").unwrap();
    assert_matches!(
        un.mutate(|u| *u = "  ".to_owned()),
        Err(prae::MutationError { .. })
    )
}

#[test]
fn mutation_succeeds_for_valid_data() {
    let mut un = Username::new("user").unwrap();
    un.mutate(|u| *u = "  new user  ".to_owned()).unwrap();
    assert_eq!(un.get(), "new user");
}