32 lines
753 B
Go
32 lines
753 B
Go
package errors
|
|
|
|
import "net/http"
|
|
|
|
// ToHTTP converts an error into an HTTP status code and a JSON-serializable body.
|
|
//
|
|
// The returned body matches the project's Status shape:
|
|
// { code, reason, message, metadata }.
|
|
func ToHTTP(err error) (statusCode int, body Status) {
|
|
if err == nil {
|
|
return http.StatusOK, Status{Code: int32(http.StatusOK)}
|
|
}
|
|
|
|
appErr := FromError(err)
|
|
if appErr == nil {
|
|
return http.StatusOK, Status{Code: int32(http.StatusOK)}
|
|
}
|
|
|
|
body = Status{
|
|
Code: appErr.Code,
|
|
Reason: appErr.Reason,
|
|
Message: appErr.Message,
|
|
}
|
|
if appErr.Metadata != nil {
|
|
body.Metadata = make(map[string]string, len(appErr.Metadata))
|
|
for k, v := range appErr.Metadata {
|
|
body.Metadata[k] = v
|
|
}
|
|
}
|
|
return int(appErr.Code), body
|
|
}
|