http.go 753 B

12345678910111213141516171819202122232425262728293031
  1. package errors
  2. import "net/http"
  3. // ToHTTP converts an error into an HTTP status code and a JSON-serializable body.
  4. //
  5. // The returned body matches the project's Status shape:
  6. // { code, reason, message, metadata }.
  7. func ToHTTP(err error) (statusCode int, body Status) {
  8. if err == nil {
  9. return http.StatusOK, Status{Code: int32(http.StatusOK)}
  10. }
  11. appErr := FromError(err)
  12. if appErr == nil {
  13. return http.StatusOK, Status{Code: int32(http.StatusOK)}
  14. }
  15. body = Status{
  16. Code: appErr.Code,
  17. Reason: appErr.Reason,
  18. Message: appErr.Message,
  19. }
  20. if appErr.Metadata != nil {
  21. body.Metadata = make(map[string]string, len(appErr.Metadata))
  22. for k, v := range appErr.Metadata {
  23. body.Metadata[k] = v
  24. }
  25. }
  26. return int(appErr.Code), body
  27. }