package http import ( "fmt" "net/http" ) type Error struct { Code int Message string Cause error } func (e *Error) Error() string { if e.Message == "" { e.Message = http.StatusText(e.Code) } return fmt.Sprintf("%d %s", e.Code, e.Message) } func NewError(code int, message string, cause error) *Error { return &Error{ Code: code, Message: message, Cause: cause, } } func NotFound(message string) *Error { return &Error{ Code: http.StatusNotFound, Message: message, } } func BadRequest(message string, cause error) *Error { return &Error{ Code: http.StatusBadRequest, Message: message, Cause: cause, } } func InternalServerError(message string, cause error) *Error { return &Error{ Code: http.StatusInternalServerError, Message: message, Cause: cause, } } func Unauthorized(message string, cause error) *Error { return &Error{ Code: http.StatusUnauthorized, Message: message, Cause: cause, } } func Forbidden(message string, cause error) *Error { return &Error{ Code: http.StatusForbidden, Message: message, Cause: cause, } }