prae 0.8.4

A crate that aims to provide a better way to define types that require validation
Documentation
#[cfg(feature = "unprocessed")]
mod tests {
    use prae::Wrapper;

    prae::define! {
        pub Username: String;
        ensure |u| !u.is_empty();
    }

    #[test]
    fn unprocessed_construction_never_fails() {
        let u = Username::new_unprocessed("lala");
        assert_eq!(u.get(), "lala");
        let u = Username::new_unprocessed("");
        assert_eq!(u.get(), "");
    }

    #[test]
    fn unprocessed_mutation_never_fails() {
        let mut u = Username::new_unprocessed("lala");
        u.mutate_unprocessed(|u| *u = "lolo".to_owned());
        assert_eq!(u.get(), "lolo");
        u.mutate_unprocessed(|u| *u = "".to_owned());
        assert_eq!(u.get(), "");
    }
}