func mergeConfigDict()

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
}