rpc: get rid of erverError type

Retrieve error's HTTP code in a separate method.
This commit is contained in:
Anna Shaleva 2022-06-10 16:26:33 +03:00
parent 6434404081
commit ea6ddbee5b
2 changed files with 8 additions and 17 deletions

View file

@ -6,12 +6,6 @@ import (
"github.com/nspcc-dev/neo-go/pkg/rpc/response" "github.com/nspcc-dev/neo-go/pkg/rpc/response"
) )
// serverError represents RPC error response on the server side.
type serverError struct {
*response.Error
HTTPCode int // HTTPCode won't be marshalled because Error's marshaller is used.
}
// abstractResult is an interface which represents either single JSON-RPC 2.0 response // abstractResult is an interface which represents either single JSON-RPC 2.0 response
// or batch JSON-RPC 2.0 response. // or batch JSON-RPC 2.0 response.
type abstractResult interface { type abstractResult interface {
@ -22,14 +16,14 @@ type abstractResult interface {
// representation. // representation.
type abstract struct { type abstract struct {
response.Header response.Header
Error *serverError `json:"error,omitempty"` Error *response.Error `json:"error,omitempty"`
Result interface{} `json:"result,omitempty"` Result interface{} `json:"result,omitempty"`
} }
// RunForErrors implements abstractResult interface. // RunForErrors implements abstractResult interface.
func (a abstract) RunForErrors(f func(jsonErr *response.Error)) { func (a abstract) RunForErrors(f func(jsonErr *response.Error)) {
if a.Error != nil { if a.Error != nil {
f(a.Error.Error) f(a.Error)
} }
} }
@ -40,12 +34,12 @@ type abstractBatch []abstract
func (ab abstractBatch) RunForErrors(f func(jsonErr *response.Error)) { func (ab abstractBatch) RunForErrors(f func(jsonErr *response.Error)) {
for _, a := range ab { for _, a := range ab {
if a.Error != nil { if a.Error != nil {
f(a.Error.Error) f(a.Error)
} }
} }
} }
func packClientError(respErr *response.Error) *serverError { func getHTTPCodeForError(respErr *response.Error) int {
var httpCode int var httpCode int
switch respErr.Code { switch respErr.Code {
case response.BadRequestCode: case response.BadRequestCode:
@ -59,8 +53,5 @@ func packClientError(respErr *response.Error) *serverError {
default: default:
httpCode = http.StatusUnprocessableEntity httpCode = http.StatusUnprocessableEntity
} }
return &serverError{ return httpCode
Error: respErr,
HTTPCode: httpCode,
}
} }

View file

@ -2250,7 +2250,7 @@ func (s *Server) packResponse(r *request.In, result interface{}, respErr *respon
}, },
} }
if respErr != nil { if respErr != nil {
resp.Error = packClientError(respErr) resp.Error = respErr
} else { } else {
resp.Result = result resp.Result = result
} }
@ -2292,7 +2292,7 @@ func (s *Server) writeHTTPServerResponse(r *request.Request, w http.ResponseWrit
if r.In != nil { if r.In != nil {
resp := resp.(abstract) resp := resp.(abstract)
if resp.Error != nil { if resp.Error != nil {
w.WriteHeader(resp.Error.HTTPCode) w.WriteHeader(getHTTPCodeForError(resp.Error))
} }
} }
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")