func Wrap()

in utils/handler/handler.go [74:103]


func Wrap(h ErrHandler) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		var status int
		var errMsg string
		if err := h(w, r); err != nil {
			switch e := err.(type) {
			case *Error:
				for k, vs := range e.header {
					for _, v := range vs {
						w.Header().Add(k, v)
					}
				}
				status = e.status
				errMsg = e.msg
			default:
				status = http.StatusInternalServerError
				errMsg = e.Error()
			}
			w.WriteHeader(status)
			if _, err := w.Write([]byte(errMsg)); err != nil {
				log.Errorf("Failed to write error response: %s", err)
			}
		} else {
			status = http.StatusOK
		}
		if status >= 400 && status != 404 {
			log.Infof("%d %s %s %s", status, r.Method, r.URL.Path, errMsg)
		}
	}
}