in gotype/unfold_user.go [95:114]
func makeUserUnfolder(fn reflect.Value) (target reflect.Type, unfolder reflUnfolder, err error) {
t := fn.Type()
if fn.Kind() != reflect.Func {
return nil, nil, errors.New("function type required")
}
switch {
case t.NumIn() == 2 && t.NumOut() == 1:
unfolder, err = makeUserPrimitiveUnfolder(fn)
case t.NumIn() == 1 && t.NumOut() == 1:
unfolder, err = makeUserStateUnfolder(fn)
case t.NumIn() == 1 && t.NumOut() == 2:
unfolder, err = makeUserProcessingUnfolder(fn)
default:
return nil, nil, fmt.Errorf("invalid number of arguments in unfolder: %v", fn)
}
return t.In(0), unfolder, err
}