package handlers import ( "net/http" "github.com/labstack/echo/v4" "github.com/mikestefanello/pagoda/pkg/context" "github.com/mikestefanello/pagoda/pkg/log" "github.com/mikestefanello/pagoda/pkg/ui/pages" ) type Error struct{} func (e *Error) Page(err error, ctx echo.Context) { if ctx.Response().Committed || context.IsCanceledError(err) { return } // Determine the error status code. code := http.StatusInternalServerError if he, ok := err.(*echo.HTTPError); ok { code = he.Code } // Log the error. logger := log.Ctx(ctx) switch { case code >= 500: logger.Error(err.Error()) case code >= 400: logger.Warn(err.Error()) } // Set the status code. ctx.Response().Status = code // Render the error page. if err = pages.Error(ctx, code); err != nil { log.Ctx(ctx).Error("failed to render error page", "error", err, ) } }