-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Hey, nice crate, was thinking about something similar in ya7010/serde_valid#106, but just stumbled upon your solution.
You seem to have a similar issue with nested structure errors:
#[derive(Validate, Deserialize, Debug)]
#[serde(validate = "serde_valid::Validate::validate")]
struct Foo {
#[validate(multiple_of = 2)] even: i32,
#[validate(pattern= r"^[^@\s]+@[^@\s]+\.[^@\s]+$")] email: String,
#[validate(minimum = 0)] #[validate(maximum = 100)] percentage: u8
}
#[derive(Validate, Deserialize, Debug)]
#[serde(validate = "serde_valid::Validate::validate")]
struct Bar { foo: Foo }
let json_invalid = r#"
{
"foo":
{
"even": 5,
"email": "bad_email",
"percentage": 125
}
}
"#;
println!("JSON invalid reslt: {:?}", serde_json::from_str::<Bar>(json_invalid).err().unwrap());
Reports:
{
"errors": [],
"properties": {
"even": {
"errors": [
"The value must be multiple of `2`."
]
},
"email": {
"errors": [
"The value must match the pattern of ..."
]
},
"percentage": {
"errors": [
"The number must be `<= 100`."
]
}
}
}
If this was a deeply nested struct (or an array), it would cause some issue finding which path caused the issue. It would be great if there could be visibility on which nested struct causes the issue.
kanarus
Metadata
Metadata
Assignees
Labels
No labels