package middleware import ( "errors" mcontext "github.com/abelith/gomax/v1/context" "github.com/abelith/gomax/v1/core" merrors "github.com/abelith/gomax/v1/errors" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func MwPanicHandler() core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { defer func() { p := recover() if p != nil { log.Fatal().Any("panic", 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 c.Respond(maxErr.Message) } if err != nil { return c.Respond(defaultMsg) } return nil } } } func MwLoggerInjector(logger zerolog.Logger) core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { ctx := logger.With().Int64("user_id", c.Update().UserID). Logger().WithContext(c.Context()) c.SetContext(ctx) return next(c) } } } func MwDebugState() core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { log.Debug().Any("state", c.State()).Any("update", c.Update()).Send() return next(c) } } } func MwErrorLogger() core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { if err := next(c); err != nil { log.Ctx(c).Err(err).Send() return err } return nil } } }