func()

in internal/kernel/callbacks.go [19:56]


func (c *callback) handle(result kernelResponder) error {
	var (
		retval reflect.Value
		err    error
	)
	if c.Invoke != nil {
		retval, err = c.Invoke.handle(c.Cookie)
	} else if c.Get != nil {
		retval, err = c.Get.handle(c.Cookie)
	} else if c.Set != nil {
		retval, err = c.Set.handle(c.Cookie)
	} else {
		return fmt.Errorf("invalid callback object: %v", c)
	}

	if err != nil {
		return err
	}

	type callbackResult struct {
		CallbackID string      `json:"cbid"`
		Result     interface{} `json:"result,omitempty"`
		Error      string      `json:"err,omitempty"`
	}
	type completeRequest struct {
		kernelRequester
		callbackResult `json:"complete"`
	}

	client := GetClient()
	request := completeRequest{}
	request.CallbackID = c.CallbackID
	request.Result = client.CastPtrToRef(retval)
	if err != nil {
		request.Error = err.Error()
	}
	return client.request(request, result)
}