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