func unmarshalKernelResponse()

in internal/kernel/json.go [15:40]


func unmarshalKernelResponse(data []byte, uresult kernelResponder, result kernelResponder) error {
	datacopy := make([]byte, len(data))
	copy(datacopy, data)

	var response map[string]json.RawMessage
	if err := json.Unmarshal(datacopy, &response); err != nil {
		return err
	}

	if err, ok := response["error"]; ok {
		return errors.New(string(err))
	}

	// In-line callback requests interrupt the current flow, the callback handling
	// logic will resume this handling once the callback request has been fulfilled.
	if raw, ok := response["callback"]; ok {
		callback := callback{}
		if err := json.Unmarshal(raw, &callback); err != nil {
			return err
		}

		return callback.handle(result)
	}

	return json.Unmarshal(response["ok"], uresult)
}