influxdb/kit/errors/errors.go

77 lines
2.0 KiB
Go
Raw Normal View History

package errors
import (
"fmt"
"net/http"
)
// TODO: move to base directory
const (
// InternalError indicates an unexpected error condition.
InternalError = 1
// MalformedData indicates malformed input, such as unparsable JSON.
MalformedData = 2
// InvalidData indicates that data is well-formed, but invalid.
InvalidData = 3
// Forbidden indicates a forbidden operation.
Forbidden = 4
)
// Error indicates an error with a reference code and an HTTP status code.
type Error struct {
Reference int `json:"referenceCode"`
Code int `json:"statusCode"`
Err string `json:"err"`
}
// SetCode sets the http status code for an error.
func (e *Error) SetCode() {
switch e.Reference {
case InternalError:
e.Code = http.StatusInternalServerError
case InvalidData:
e.Code = http.StatusUnprocessableEntity
case MalformedData:
e.Code = http.StatusBadRequest
case Forbidden:
e.Code = http.StatusForbidden
default:
e.Reference = InternalError
e.Code = http.StatusInternalServerError
}
}
// Error implements the error interface.
func (e Error) Error() string {
return fmt.Sprintf("%v (error reference code: %d)", e.Err, e.Reference)
}
// Errorf constructs an Error with the given reference code and format.
func Errorf(ref int, format string, i ...interface{}) error {
return &Error{
Reference: ref,
Err: fmt.Sprintf(format, i...),
}
}
// InternalErrorf constructs an InternalError with the given format.
func InternalErrorf(format string, i ...interface{}) error {
return Errorf(InternalError, format, i...)
}
// MalformedDataf constructs a MalformedData error with the given format.
func MalformedDataf(format string, i ...interface{}) error {
return Errorf(MalformedData, format, i...)
}
// InvalidDataf constructs an InvalidData error with the given format.
func InvalidDataf(format string, i ...interface{}) error {
return Errorf(InvalidData, format, i...)
}
// Forbiddenf constructs a Forbidden error with the given format.
func Forbiddenf(format string, i ...interface{}) error {
return Errorf(Forbidden, format, i...)
}