in gotype/fold.go [63:91]
func NewIterator(vs structform.Visitor, opts ...FoldOption) (*Iterator, error) {
reg := newTypeFoldRegistry()
O, err := applyFoldOpts(opts)
if err != nil {
return nil, err
}
var userReg map[reflect.Type]reFoldFn
if O.foldFns != nil {
userReg = map[reflect.Type]reFoldFn{}
for typ, folder := range O.foldFns {
reg.set(typ, folder)
userReg[typ] = folder
}
}
it := &Iterator{
ctx: foldContext{
visitor: structform.EnsureExtVisitor(vs).(visitor),
userReg: userReg,
reg: reg,
opts: options{
tag: "struct",
},
},
}
return it, nil
}