diff --git a/router.go b/router.go index 5181eda..89d7a97 100644 --- a/router.go +++ b/router.go @@ -16,6 +16,20 @@ type Handler interface { Serve(params []string) } +// SimpleHandler implements the Handler interface +type SimpleHandler struct { + fn func(params []string) +} + +func (h *SimpleHandler) Serve(params []string) { + h.fn(params) +} + +// NewHandler creates a Handler from a function +func NewHandler(fn func(params []string)) Handler { + return &SimpleHandler{fn: fn} +} + // Middleware wraps a handler with additional functionality. type Middleware func(Handler) Handler diff --git a/router_test.go b/router_test.go index 4290ade..ee5e37d 100644 --- a/router_test.go +++ b/router_test.go @@ -8,20 +8,6 @@ import ( assert "git.sharkk.net/Go/Assert" ) -// simpleHandler implements the Handler interface -type simpleHandler struct { - fn func(params []string) -} - -func (h *simpleHandler) Serve(params []string) { - h.fn(params) -} - -// newHandler creates a simple Handler from a function -func newHandler(fn func(params []string)) Handler { - return &simpleHandler{fn: fn} -} - func TestRootPath(t *testing.T) { r := New() r.Get("/", func(w Res, r Req, params []string) { @@ -196,7 +182,7 @@ func TestMiddleware(t *testing.T) { executed := false r.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { executed = true next.Serve(params) }) @@ -217,7 +203,7 @@ func TestMiddleware(t *testing.T) { order := []int{} r.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 1) next.Serve(params) order = append(order, 4) @@ -225,7 +211,7 @@ func TestMiddleware(t *testing.T) { }) r.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 2) next.Serve(params) order = append(order, 3) @@ -255,7 +241,7 @@ func TestMiddleware(t *testing.T) { executed := false middleware := func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { executed = true next.Serve(params) }) @@ -304,7 +290,7 @@ func TestGroup(t *testing.T) { // Create group with middleware api := r.Group("/api") api.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { executed = true next.Serve(params) }) @@ -325,7 +311,7 @@ func TestGroup(t *testing.T) { // Create group with middleware api := r.Group("/api") api.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 1) next.Serve(params) }) @@ -334,7 +320,7 @@ func TestGroup(t *testing.T) { // Create nested group with additional middleware v1 := api.Group("/v1") v1.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 2) next.Serve(params) }) @@ -362,7 +348,7 @@ func TestGroup(t *testing.T) { // Create group with middleware api := r.Group("/api") api.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 1) next.Serve(params) }) @@ -370,7 +356,7 @@ func TestGroup(t *testing.T) { // Add route with specific middleware api.WithMiddleware(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { order = append(order, 2) next.Serve(params) }) @@ -479,7 +465,7 @@ func BenchmarkWildcardLookup(b *testing.B) { func BenchmarkMiddleware(b *testing.B) { passthrough := func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { next.Serve(params) }) } @@ -509,7 +495,7 @@ func BenchmarkMiddleware(b *testing.B) { b.Run("five_middleware", func(b *testing.B) { r := New() - for i := 0; i < 5; i++ { + for range 5 { r.Use(passthrough) } r.Get("/test", func(w Res, r Req, params []string) {}) @@ -551,7 +537,7 @@ func BenchmarkGroups(b *testing.B) { r := New() api := r.Group("/api") api.Use(func(next Handler) Handler { - return newHandler(func(params []string) { + return NewHandler(func(params []string) { next.Serve(params) }) })