From 5deb0e5f0de7873e0e8793da9defa42ca2ea6aa4 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 11 Mar 2021 16:47:12 -0600 Subject: [PATCH] if non wildcard is nil, try wildcard route --- router.go | 0 router_test.go | 0 tree.go | 28 ++++++++++++++++++++++++---- tree_test.go | 0 4 files changed, 24 insertions(+), 4 deletions(-) mode change 100644 => 100755 router.go mode change 100644 => 100755 router_test.go mode change 100644 => 100755 tree.go mode change 100644 => 100755 tree_test.go diff --git a/router.go b/router.go old mode 100644 new mode 100755 diff --git a/router_test.go b/router_test.go old mode 100644 new mode 100755 diff --git a/tree.go b/tree.go old mode 100644 new mode 100755 index cc2ff0d..817bed9 --- a/tree.go +++ b/tree.go @@ -24,12 +24,24 @@ func newTree() *tree { func (t *tree) Lookup(path string) http.HandlerFunc { if path == "/" || path == "" { - return t.handler + if t.handler != nil { + return t.handler + } + if n, ok := t.next[Wildcard+Wildcard]; t.handler == nil && ok { + foo := n.handler + return foo + } + return nil } key, following := nextPathSegment(path) - if n, ok := t.next[key]; ok { - return n.Lookup(following) - } else if n, ok := t.next[Wildcard]; ok { + n, ok := t.next[key] + if ok { + n2 := n.Lookup(following) + if n2 != nil { + return n2 + } + } + if n, ok := t.next[Wildcard]; ok { foo := n.Lookup(following) if foo != nil { return func(w http.ResponseWriter, r *http.Request) { @@ -37,6 +49,14 @@ func (t *tree) Lookup(path string) http.HandlerFunc { foo(w, r) } } + } else if n, ok := t.next[Wildcard+Wildcard]; ok { + foo := n.handler + if foo != nil { + return func(w http.ResponseWriter, r *http.Request) { + r.Header.Add(WildcardHeader, key) + foo(w, r) + } + } } return nil } diff --git a/tree_test.go b/tree_test.go old mode 100644 new mode 100755