@@ -248,7 +248,6 @@ func (e *FieldError) Error() string {
248248// This is now needed because of the new dive functionality
249249func (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
0 commit comments