in merge.go [172:206]
func mergeConfigMergeArr(opts *options, to, from *Config) Error {
l := len(to.fields.array())
arr := from.fields.array()
if l > len(arr) {
l = len(arr)
}
var parent value = cfgSub{to}
// merge array indexes available in to and from
for i := 0; i < l; i++ {
ctx := context{
parent: parent,
field: fmt.Sprintf("%v", i),
}
// possible for individual index to be replaced
idxOpts, err := fieldOptsOverride(opts, "", i)
if err != nil {
return err
}
old := to.fields.array()[i]
merged, err := mergeValues(idxOpts, old, arr[i])
if err != nil {
return err
}
to.fields.setAt(i, parent, merged.cpy(ctx))
}
if len(arr) > l {
// add additional array entries not yet in 'to'
to.fields.append(parent, arr[l:])
}
return nil
}