1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
use garde::Validate;
#[derive(Validate)]
pub struct UserIdentifier {
#[garde(range(max = 4))]
pub id: usize,
}
#[derive(Validate)]
pub struct UserRole {
#[garde(ascii, length(min = 10))]
pub name: String,
#[garde(dive)]
pub identifiers: Vec<UserIdentifier>,
}
#[test]
fn select_macro() {
let v = UserRole {
name: "😂".into(),
identifiers: vec![UserIdentifier { id: 10 }, UserIdentifier { id: 20 }],
};
let report = v.validate().unwrap_err();
{
let errors: Vec<String> = garde::select!(report, identifiers[0])
.map(|e| e.to_string())
.collect();
assert_eq!(errors, ["greater than 4"]);
}
{
let errors: Vec<String> = garde::select!(report, name)
.map(|e| e.to_string())
.collect();
assert_eq!(errors, ["not ascii", "length is lower than 10"])
}
}
|