Merge pull request #170 from svanharmelen/f-errors
Improve the UX for users of the errors package.
This commit is contained in:
		| @@ -1,14 +1,14 @@ | ||||
| // Package errors is an interface for defining detailed errors | ||||
| // Package errors provides a way to return detailed information | ||||
| // for an RPC request error. The error is normally JSON encoded. | ||||
| package errors | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| ) | ||||
|  | ||||
| // Errors provide a way to return detailed information | ||||
| // for an RPC request error. The error is normally | ||||
| // JSON encoded. | ||||
| // Error implements the error interface. | ||||
| type Error struct { | ||||
| 	Id     string `json:"id"` | ||||
| 	Code   int32  `json:"code"` | ||||
| @@ -21,6 +21,7 @@ func (e *Error) Error() string { | ||||
| 	return string(b) | ||||
| } | ||||
|  | ||||
| // New generates a custom error. | ||||
| func New(id, detail string, code int32) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| @@ -30,6 +31,8 @@ func New(id, detail string, code int32) error { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Parse tries to parse a JSON string into an error. If that | ||||
| // fails, it will set the given string as the error detail. | ||||
| func Parse(err string) *Error { | ||||
| 	e := new(Error) | ||||
| 	errr := json.Unmarshal([]byte(err), e) | ||||
| @@ -39,47 +42,52 @@ func Parse(err string) *Error { | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func BadRequest(id, detail string) error { | ||||
| // BadRequest generates a 400 error. | ||||
| func BadRequest(id, format string, a ...interface{}) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| 		Code:   400, | ||||
| 		Detail: detail, | ||||
| 		Detail: fmt.Sprintf(format, a...), | ||||
| 		Status: http.StatusText(400), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Unauthorized(id, detail string) error { | ||||
| // Unauthorized generates a 401 error. | ||||
| func Unauthorized(id, format string, a ...interface{}) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| 		Code:   401, | ||||
| 		Detail: detail, | ||||
| 		Detail: fmt.Sprintf(format, a...), | ||||
| 		Status: http.StatusText(401), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Forbidden(id, detail string) error { | ||||
| // Forbidden generates a 403 error. | ||||
| func Forbidden(id, format string, a ...interface{}) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| 		Code:   403, | ||||
| 		Detail: detail, | ||||
| 		Detail: fmt.Sprintf(format, a...), | ||||
| 		Status: http.StatusText(403), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func NotFound(id, detail string) error { | ||||
| // NotFound generates a 404 error. | ||||
| func NotFound(id, format string, a ...interface{}) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| 		Code:   404, | ||||
| 		Detail: detail, | ||||
| 		Detail: fmt.Sprintf(format, a...), | ||||
| 		Status: http.StatusText(404), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func InternalServerError(id, detail string) error { | ||||
| // InternalServerError generates a 500 error. | ||||
| func InternalServerError(id, format string, a ...interface{}) error { | ||||
| 	return &Error{ | ||||
| 		Id:     id, | ||||
| 		Code:   500, | ||||
| 		Detail: detail, | ||||
| 		Detail: fmt.Sprintf(format, a...), | ||||
| 		Status: http.StatusText(500), | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user