in merge.go [93:131]
func mergeConfigDict(opts *options, to, from *Config) Error {
dict := from.fields.dict()
if len(dict) == 0 {
return nil
}
ok := false
if opts.configValueHandling == cfgReplaceValue {
old := to.fields.dict()
to.fields.d = nil
defer func() {
if !ok {
to.fields.d = old
}
}()
}
for k, v := range dict {
ctx := context{
parent: cfgSub{to},
field: k,
}
old, _ := to.fields.get(k)
opts, err := fieldOptsOverride(opts, k, -1)
if err != nil {
return err
}
merged, err := mergeValues(opts, old, v)
if err != nil {
return err
}
to.fields.set(k, merged.cpy(ctx))
}
ok = true
return nil
}