| package errdefs | |
| import ( | |
| "net/http" | |
| ) | |
| // FromStatusCode creates an errdef error, based on the provided HTTP status-code | |
| func FromStatusCode(err error, statusCode int) error { | |
| if err == nil { | |
| return nil | |
| } | |
| switch statusCode { | |
| case http.StatusNotFound: | |
| err = NotFound(err) | |
| case http.StatusBadRequest: | |
| err = InvalidParameter(err) | |
| case http.StatusConflict: | |
| err = Conflict(err) | |
| case http.StatusUnauthorized: | |
| err = Unauthorized(err) | |
| case http.StatusServiceUnavailable: | |
| err = Unavailable(err) | |
| case http.StatusForbidden: | |
| err = Forbidden(err) | |
| case http.StatusNotModified: | |
| err = NotModified(err) | |
| case http.StatusNotImplemented: | |
| err = NotImplemented(err) | |
| case http.StatusInternalServerError: | |
| if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) { | |
| err = System(err) | |
| } | |
| default: | |
| switch { | |
| case statusCode >= 200 && statusCode < 400: | |
| // it's a client error | |
| case statusCode >= 400 && statusCode < 500: | |
| err = InvalidParameter(err) | |
| case statusCode >= 500 && statusCode < 600: | |
| err = System(err) | |
| default: | |
| err = Unknown(err) | |
| } | |
| } | |
| return err | |
| } |