http_helpers.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package errdefs
  2. import (
  3. "net/http"
  4. )
  5. // FromStatusCode creates an errdef error, based on the provided HTTP status-code
  6. func FromStatusCode(err error, statusCode int) error {
  7. if err == nil {
  8. return nil
  9. }
  10. switch statusCode {
  11. case http.StatusNotFound:
  12. err = NotFound(err)
  13. case http.StatusBadRequest:
  14. err = InvalidParameter(err)
  15. case http.StatusConflict:
  16. err = Conflict(err)
  17. case http.StatusUnauthorized:
  18. err = Unauthorized(err)
  19. case http.StatusServiceUnavailable:
  20. err = Unavailable(err)
  21. case http.StatusForbidden:
  22. err = Forbidden(err)
  23. case http.StatusNotModified:
  24. err = NotModified(err)
  25. case http.StatusNotImplemented:
  26. err = NotImplemented(err)
  27. case http.StatusInternalServerError:
  28. if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) {
  29. err = System(err)
  30. }
  31. default:
  32. switch {
  33. case statusCode >= 200 && statusCode < 400:
  34. // it's a client error
  35. case statusCode >= 400 && statusCode < 500:
  36. err = InvalidParameter(err)
  37. case statusCode >= 500 && statusCode < 600:
  38. err = System(err)
  39. default:
  40. err = Unknown(err)
  41. }
  42. }
  43. return err
  44. }