Advertisement
dimuska139

Untitled

Jan 6th, 2022
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.38 KB | None | 0 0
  1. func ServeError(rw http.ResponseWriter, r *http.Request, err error) {
  2.     rw.Header().Set("Content-Type", "application/json")
  3.     switch e := err.(type) {
  4.     case *CompositeError:
  5.         er := flattenComposite(e)
  6.         // strips composite errors to first element only
  7.         if len(er.Errors) > 0 {
  8.             ServeError(rw, r, er.Errors[0])
  9.         } else {
  10.             // guard against empty CompositeError (invalid construct)
  11.             ServeError(rw, r, nil)
  12.         }
  13.     case *MethodNotAllowedError:
  14.         rw.Header().Add("Allow", strings.Join(err.(*MethodNotAllowedError).Allowed, ","))
  15.         rw.WriteHeader(asHTTPCode(int(e.Code())))
  16.         if r == nil || r.Method != http.MethodHead {
  17.             _, _ = rw.Write(errorAsJSON(e))
  18.         }
  19.     case Error:
  20.         value := reflect.ValueOf(e)
  21.         if value.Kind() == reflect.Ptr && value.IsNil() {
  22.             rw.WriteHeader(http.StatusInternalServerError)
  23.             _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, "Unknown error")))
  24.             return
  25.         }
  26.         rw.WriteHeader(asHTTPCode(int(e.Code())))
  27.         if r == nil || r.Method != http.MethodHead {
  28.             _, _ = rw.Write(errorAsJSON(e))
  29.         }
  30.     case nil:
  31.         rw.WriteHeader(http.StatusInternalServerError)
  32.         _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, "Unknown error")))
  33.     default:
  34.         rw.WriteHeader(http.StatusInternalServerError)
  35.         if r == nil || r.Method != http.MethodHead {
  36.             _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, err.Error())))
  37.         }
  38.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement