Files
gomax/v1/middleware/middleware.go
T

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
}
}
}