package slurm import ( "fmt" "io" "net/http" ) // ErrorResponse represents an error returned by the Slurm REST API. type ErrorResponse struct { Response *http.Response Message string } func (r *ErrorResponse) Error() string { return fmt.Sprintf("%v %v: %d %s", r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, r.Message) } // CheckResponse checks the API response for errors. It returns nil if the // response is a 2xx status code. For non-2xx codes, it reads the response // body and returns an ErrorResponse. func CheckResponse(r *http.Response) error { if c := r.StatusCode; c >= 200 && c <= 299 { return nil } errorResponse := &ErrorResponse{Response: r} data, err := io.ReadAll(r.Body) if err != nil || len(data) == 0 { errorResponse.Message = r.Status return errorResponse } errorResponse.Message = string(data) return errorResponse }