func checkUserStateUnfolder()

in gotype/unfold_user.go [215:236]


func checkUserStateUnfolder(fn reflect.Value) error {
	if fn.Kind() != reflect.Func {
		return fmt.Errorf("state unfolder '%v' is no function", fn)
	}

	t := fn.Type()

	// check input
	if t.NumIn() != 1 {
		return fmt.Errorf("state unfolder '%v' must accept one target argument", fn)
	}
	in := t.In(0)
	if in.Kind() != reflect.Ptr {
		return fmt.Errorf("state unfolder '%v' target argument must be a pointer", fn)
	}

	if t.NumOut() != 1 || (t.NumOut() > 0 && t.Out(0) != tUnfoldState) {
		return fmt.Errorf("function '%v' does not return UnfoldState type", fn)
	}

	return nil
}