func makeUserUnfolder()

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
}