Closed
Description
System (please complete the following information):
- OS:
macOS
- GO Version:
1.20
- Pkg Version:
1.5.0
Describe the bug
nested data more than 1 level is incorrectly validated. while required works correctly
To Reproduce
m := map[string]any{
"clinics": []map[string]any{
{
"clinic_id": "1",
"doctors": []map[string]any{
{
"doctor_id": 1,
"dates": []map[string]string{
{
"date": "2023-01-01",
},
},
},
},
},
},
}
v := validate.Map(m)
v.StringRule("clinics", "required|array")
v.StringRule("clinics.*.clinic_id", "required|string")
v.StringRule("clinics.*.doctors", "required|array")
v.StringRule("clinics.*.doctors.*.doctor_id", "required")
v.StringRule("clinics.*.doctors.*.dates", "required|array")
v.StringRule("clinics.*.doctors.*.dates.*.date", "required|string")
if v.Validate() { // validate ok
safeData := v.SafeData()
fmt.Println("Validation OK:")
fmt.Println(safeData)
} else {
fmt.Println(v.Errors) // all error messages
fmt.Println(v.Errors.One()) // returns a random error message text
}
Result:
clinics.*.doctors.*.dates.*.date:
string: clinics.*.doctors.*.dates.*.date value must be a string
clinics.*.doctors.*.dates.*.date value must be a string
without additional rules (OK):
v.StringRule("clinics.*.doctors.*.dates.*.date", "required")
Result
Validation OK:
map[clinics:[map[clinic_id:1 doctors:[map[dates:[map[date:2023-01-01]] doctor_id:1]]]] clinics.*.clinic_id:[1] clinics.*.doctors:[[map[dates:[map[date:2023-01-01]] doctor_id:1]]] clinics.*.doctors.*.dates:[[[map[date:2023-01-01]]]] clinics.*.doctors.*.dates.*.date:[[[2023-01-01]]] clinics.*.doctors.*.doctor_id:[[1]]]
Expected behavior
Nested structures must validate correctly