64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package middleware
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
mcontext "github.com/abelith/gomax/v1/context"
|
|
"github.com/abelith/gomax/v1/core"
|
|
merrors "github.com/abelith/gomax/v1/errors"
|
|
)
|
|
|
|
func MwPanicHandler(onPanic func()) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) (err error) {
|
|
defer func() {
|
|
p := recover()
|
|
if p != nil {
|
|
onPanic()
|
|
err = fmt.Errorf("panic: %v", p)
|
|
}
|
|
}()
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwErrorResponder(defaultMsg string) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
err := next(c)
|
|
var maxErr *merrors.GoMaxError
|
|
|
|
if errors.As(err, &maxErr) {
|
|
return errors.Join(c.Respond(maxErr.Message), maxErr)
|
|
}
|
|
|
|
if err != nil {
|
|
return errors.Join(c.Respond(defaultMsg), err)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwCallback(callback func(c *mcontext.Context)) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
callback(c)
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwErrorHandler(onError func(err error)) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
var err error
|
|
if err = next(c); err != nil {
|
|
onError(err)
|
|
}
|
|
return err
|
|
}
|
|
}
|
|
}
|