diff --git a/interfaces/queryExecutor.go b/interfaces/queryExecutor.go index 64265d3e..580eafd3 100644 --- a/interfaces/queryExecutor.go +++ b/interfaces/queryExecutor.go @@ -62,30 +62,3 @@ type AsyncResponse struct { func (r Response) String() string { return fmt.Sprintf("Response \nRequestID: %v, \nStatus: {%#v}, \nResult: {%#v}\n", r.RequestID, r.Status, r.Result) } - -// DetectError detects any possible errors in responses from Gremlin Server and generates an error for each code -func (r *Response) DetectError() (err error) { - switch r.Status.Code { - case StatusSuccess, StatusNoContent, StatusPartialContent: - break - case StatusUnauthorized: - err = fmt.Errorf("UNAUTHORIZED - Response Message: %s", r.Status.Message) - case StatusAuthenticate: - err = fmt.Errorf("AUTHENTICATE - Response Message: %s", r.Status.Message) - case StatusMalformedRequest: - err = fmt.Errorf("MALFORMED REQUEST - Response Message: %s", r.Status.Message) - case StatusInvalidRequestArguments: - err = fmt.Errorf("INVALID REQUEST ARGUMENTS - Response Message: %s", r.Status.Message) - case StatusServerError: - err = fmt.Errorf("SERVER ERROR - Response Message: %s", r.Status.Message) - case StatusScriptEvaluationError: - err = fmt.Errorf("SCRIPT EVALUATION ERROR - Response Message: %s", r.Status.Message) - case StatusServerTimeout: - err = fmt.Errorf("SERVER TIMEOUT - Response Message: %s", r.Status.Message) - case StatusServerSerializationError: - err = fmt.Errorf("SERVER SERIALIZATION ERROR - Response Message: %s", r.Status.Message) - default: - err = fmt.Errorf("UNKNOWN ERROR - Response Message: %s", r.Status.Message) - } - return -} diff --git a/response.go b/response.go index f83e7141..5959707b 100644 --- a/response.go +++ b/response.go @@ -19,14 +19,15 @@ func (c *client) handleResponse(msg []byte) error { } // marshalResponse creates a response struct for every incoming response for further manipulation -func marshalResponse(msg []byte) (resp interfaces.Response, err error) { - err = json.Unmarshal(msg, &resp) +func marshalResponse(msg []byte) (interfaces.Response, error) { + resp := interfaces.Response{} + err := json.Unmarshal(msg, &resp) if err != nil { - return + return resp, err } - err = resp.DetectError() - return + err = extractError(resp) + return resp, err } // saveResponse makes the response available for retrieval by the requester. Mutexes are used for thread safety. @@ -167,3 +168,29 @@ func (c *client) retrieveResponse(id string) ([]interfaces.Response, error) { func (c *client) deleteResponse(id string) { c.results.Delete(id) } + +// DetectError detects any possible errors in responses from Gremlin Server and generates an error for each code +func extractError(r interfaces.Response) error { + switch r.Status.Code { + case interfaces.StatusSuccess, interfaces.StatusNoContent, interfaces.StatusPartialContent: + return nil + case interfaces.StatusUnauthorized: + return fmt.Errorf("UNAUTHORIZED - Response Message: %s", r.Status.Message) + case interfaces.StatusAuthenticate: + return fmt.Errorf("AUTHENTICATE - Response Message: %s", r.Status.Message) + case interfaces.StatusMalformedRequest: + return fmt.Errorf("MALFORMED REQUEST - Response Message: %s", r.Status.Message) + case interfaces.StatusInvalidRequestArguments: + return fmt.Errorf("INVALID REQUEST ARGUMENTS - Response Message: %s", r.Status.Message) + case interfaces.StatusServerError: + return fmt.Errorf("SERVER ERROR - Response Message: %s", r.Status.Message) + case interfaces.StatusScriptEvaluationError: + return fmt.Errorf("SCRIPT EVALUATION ERROR - Response Message: %s", r.Status.Message) + case interfaces.StatusServerTimeout: + return fmt.Errorf("SERVER TIMEOUT - Response Message: %s", r.Status.Message) + case interfaces.StatusServerSerializationError: + return fmt.Errorf("SERVER SERIALIZATION ERROR - Response Message: %s", r.Status.Message) + default: + return fmt.Errorf("UNKNOWN ERROR - Response Message: %s", r.Status.Message) + } +} diff --git a/response_test.go b/response_test.go index dd599f6a..2ecacf47 100644 --- a/response_test.go +++ b/response_test.go @@ -280,7 +280,7 @@ func TestResponseErrorDetection(t *testing.T) { Status: interfaces.Status{Code: co.code}, Result: interfaces.Result{}, } - err := dummyResponse.DetectError() + err := extractError(dummyResponse) switch { case co.code == 200: if err != nil {