40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
package hws
|
|
|
|
import "net/http"
|
|
|
|
type HWSError struct {
|
|
statusCode int // HTTP Status code
|
|
message string // Error message
|
|
error error // Error
|
|
}
|
|
|
|
type ErrorPage func(statusCode int, w http.ResponseWriter, r *http.Request) error
|
|
|
|
func NewError(statusCode int, msg string, err error) *HWSError {
|
|
return &HWSError{
|
|
statusCode: statusCode,
|
|
message: msg,
|
|
error: err,
|
|
}
|
|
}
|
|
|
|
func (server *Server) AddErrorPage(page ErrorPage) {
|
|
server.errorPage = page
|
|
}
|
|
|
|
func (server *Server) ThrowError(w http.ResponseWriter, r *http.Request, error *HWSError) {
|
|
w.WriteHeader(error.statusCode)
|
|
server.logger.logger.Error().Err(error.error).Msg(error.message)
|
|
if server.errorPage != nil {
|
|
err := server.errorPage(error.statusCode, w, r)
|
|
if err != nil {
|
|
server.logger.logger.Error().Err(err).Msg("Failed to render error page")
|
|
}
|
|
}
|
|
}
|
|
|
|
func (server *Server) ThrowWarn(w http.ResponseWriter, error *HWSError) {
|
|
w.WriteHeader(error.statusCode)
|
|
server.logger.logger.Warn().Err(error.error).Msg(error.message)
|
|
}
|