package middleware import ( "errors" mcontext "github.com/abelith/gomax/context" "github.com/abelith/gomax/core" merrors "github.com/abelith/gomax/errors" "github.com/rs/zerolog/log" ) func MwErrorResponder(defaultMsg string) core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { err := next.HandleUpdate(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() core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { ctx := log.Logger.With().Int64("user_id", c.Update().UserID). Logger().WithContext(c.Context()) c.SetContext(ctx) return next.HandleUpdate(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.HandleUpdate(c) } } } func MwErrorLogger() core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { if err := next.HandleUpdate(c); err != nil { log.Ctx(c).Err(err).Send() return err } return nil } } }