6868)
6969
7070// merge sets w.out.
71- func (w * mergingWalker ) merge () (errs ValidationErrors ) {
71+ func (w * mergingWalker ) merge (prefixFn func () string ) (errs ValidationErrors ) {
7272 if w .lhs == nil && w .rhs == nil {
7373 // check this condidition here instead of everywhere below.
7474 return errorf ("at least one of lhs and rhs must be provided" )
@@ -91,7 +91,7 @@ func (w *mergingWalker) merge() (errs ValidationErrors) {
9191 if ! w .inLeaf && w .postItemHook != nil {
9292 w .postItemHook (w )
9393 }
94- return errs
94+ return errs . WithLazyPrefix ( prefixFn )
9595}
9696
9797// doLeaf should be called on leaves before descending into children, if there
@@ -223,9 +223,8 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
223223 if rchild , ok := observedRHS .Get (pe ); ok {
224224 w2 .rhs = rchild
225225 }
226- if newErrs := w2 .merge (); len (newErrs ) > 0 {
227- errs = append (errs , newErrs .WithPrefix (pe .String ())... )
228- } else if w2 .out != nil {
226+ errs = append (errs , w2 .merge (pe .String )... )
227+ if w2 .out != nil {
229228 out = append (out , * w2 .out )
230229 }
231230 w .finishDescent (w2 )
@@ -239,9 +238,8 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
239238 value , _ := observedRHS .Get (pe )
240239 w2 := w .prepareDescent (pe , t .ElementType )
241240 w2 .rhs = value
242- if newErrs := w2 .merge (); len (newErrs ) > 0 {
243- errs = append (errs , newErrs .WithPrefix (pe .String ())... )
244- } else if w2 .out != nil {
241+ errs = append (errs , w2 .merge (pe .String )... )
242+ if w2 .out != nil {
245243 out = append (out , * w2 .out )
246244 }
247245 w .finishDescent (w2 )
@@ -302,13 +300,12 @@ func (w *mergingWalker) visitMapItem(t *schema.Map, out map[string]interface{},
302300 w2 := w .prepareDescent (pe , fieldType )
303301 w2 .lhs = lhs
304302 w2 .rhs = rhs
305- if newErrs := w2 .merge (); len (newErrs ) > 0 {
306- errs = append (errs , newErrs .WithPrefix (pe .String ())... )
307- } else if w2 .out != nil {
303+ errs = append (errs , w2 .merge (pe .String )... )
304+ if w2 .out != nil {
308305 out [key ] = * w2 .out
309306 }
310307 w .finishDescent (w2 )
311- return nil
308+ return errs
312309}
313310
314311func (w * mergingWalker ) visitMapItems (t * schema.Map , lhs , rhs value.Map ) (errs ValidationErrors ) {
0 commit comments