in reify.go [163:189]
func reifyInto(opts *options, to reflect.Value, from *Config) Error {
to = chaseValuePointers(to)
if to, ok := tryTConfig(to); ok {
return mergeConfig(opts, to.Addr().Interface().(*Config), from)
}
tTo := chaseTypePointers(to.Type())
k := tTo.Kind()
switch k {
case reflect.Map:
return reifyMap(opts, to, from, nil)
case reflect.Struct:
return reifyStruct(opts, to, from)
case reflect.Slice, reflect.Array:
fopts := fieldOptions{opts: opts, tag: tagOptions{}, validators: nil}
v, err := reifyMergeValue(fopts, to, cfgSub{from})
if err != nil {
return err
}
to.Set(v)
return nil
}
return raiseInvalidTopLevelType(to.Interface(), opts.meta)
}