Skip to content

Commit 4d57165

Browse files
joeybloggsjoeybloggs
authored andcommitted
fix wrong variable used in checking for "[" char
for #85
1 parent 7d55bfd commit 4d57165

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

validator.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ func (e *FieldError) Error() string {
248248
// This is now needed because of the new dive functionality
249249
func (e *FieldError) Flatten() map[string]*FieldError {
250250

251-
// return e.flatten(false)
252251
errs := map[string]*FieldError{}
253252

254253
if e.IsPlaceholderErr {
@@ -276,18 +275,31 @@ func (e *FieldError) Flatten() map[string]*FieldError {
276275
}
277276
}
278277
}
279-
280278
}
281279

282280
if e.IsMap {
283-
// for _, err := range e.MapErrs {
284-
285-
// if flat := err.Flatten(); flat != nil && len(flat) > 0 {
286-
// for k, v := range flat {
287-
// errs[k] = v
288-
// }
289-
// }
290-
// }
281+
for key, err := range e.MapErrs {
282+
283+
fe, ok := err.(*FieldError)
284+
285+
if ok {
286+
287+
if flat := fe.Flatten(); flat != nil && len(flat) > 0 {
288+
for k, v := range flat {
289+
errs[fmt.Sprintf("[%#v]%s", key, k)] = v
290+
}
291+
}
292+
} else {
293+
294+
se := err.(*StructErrors)
295+
296+
if flat := se.flatten(false); flat != nil && len(flat) > 0 {
297+
for k, v := range flat {
298+
errs[fmt.Sprintf("[%#v].%s.%s", key, se.Struct, k)] = v
299+
}
300+
}
301+
}
302+
}
291303
}
292304

293305
return errs
@@ -340,7 +352,7 @@ func (e *StructErrors) flatten(isFromStruct bool) map[string]*FieldError {
340352

341353
for k, fe := range flat {
342354

343-
if isFromStruct && f.Field[0:1] == "[" {
355+
if isFromStruct && k[0:1] == "[" {
344356
errs[f.Field+k] = fe
345357
} else {
346358
errs[k] = fe

validator_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,11 @@ func TestFlattenValidation(t *testing.T) {
266266
Equal(t, flatFieldErr.Field, "Name")
267267
Equal(t, flatFieldErr.Tag, "required")
268268

269+
structErrFlatten, ok := errs.Flatten()["Errs[0][1].Inner.Name"]
270+
Equal(t, ok, true)
271+
Equal(t, structErrFlatten.Field, "Name")
272+
Equal(t, structErrFlatten.Tag, "required")
273+
269274
// expect Errs[0][1].Inner.Name = error
270275
// fmt.Println((fieldErr.SliceOrArrayErrs[0].(*FieldError)).Field)
271276
// fmt.Println((fieldErr.SliceOrArrayErrs[0].(*FieldError)).IsPlaceholderErr)

0 commit comments

Comments
 (0)