Skip to content

Commit

Permalink
allow middlewares to abort handler execution
Browse files Browse the repository at this point in the history
  • Loading branch information
topi314 committed Apr 1, 2023
1 parent 785b21e commit cb10239
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 17 deletions.
2 changes: 1 addition & 1 deletion handler/middleware.go
Expand Up @@ -5,7 +5,7 @@ import (
)

type (
Handler func(e *events.InteractionCreate)
Handler func(e *events.InteractionCreate) error

Middleware func(next Handler) Handler

Expand Down
4 changes: 2 additions & 2 deletions handler/middleware/logger.go
Expand Up @@ -6,8 +6,8 @@ import (
)

var Logger handler.Middleware = func(next handler.Handler) handler.Handler {
return func(e *events.InteractionCreate) {
return func(e *events.InteractionCreate) error {
e.Client().Logger().Infof("handling interaction: %s\n", e.Interaction.ID())
next(e)
return next(e)
}
}
4 changes: 2 additions & 2 deletions handler/middleware/print.go
Expand Up @@ -7,9 +7,9 @@ import (

func Print(content string) handler.Middleware {
return func(next handler.Handler) handler.Handler {
return func(event *events.InteractionCreate) {
return func(event *events.InteractionCreate) error {
println(content)
next(event)
return next(event)
}
}
}
27 changes: 15 additions & 12 deletions handler/mux.go
Expand Up @@ -84,22 +84,25 @@ func (r *Mux) Match(path string, t discord.InteractionType) bool {

// Handle handles the given interaction event.
func (r *Mux) Handle(path string, variables map[string]string, e *events.InteractionCreate) error {
path = parseVariables(path, r.pattern, variables)
middlewares := func(event *events.InteractionCreate) {}
for i := len(r.middlewares) - 1; i >= 0; i-- {
middlewares = r.middlewares[i](middlewares)
}
middlewares(e)
handlerChain := func(event *events.InteractionCreate) error {
path = parseVariables(path, r.pattern, variables)

for _, route := range r.routes {
if route.Match(path, e.Type()) {
return route.Handle(path, variables, e)
for _, route := range r.routes {
if route.Match(path, e.Type()) {
return route.Handle(path, variables, e)
}
}
if r.notFoundHandler != nil {
return r.notFoundHandler(e)
}
return nil
}
if r.notFoundHandler != nil {
return r.notFoundHandler(e)

for i := len(r.middlewares) - 1; i >= 0; i-- {
handlerChain = r.middlewares[i](handlerChain)
}
return nil

return handlerChain(e)
}

// Use adds the given middlewares to the current Router.
Expand Down

0 comments on commit cb10239

Please sign in to comment.