From 75cb4b469b09cb6046ae858a1ae071340402fc83 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Fri, 17 Jun 2022 14:22:51 -0600 Subject: [PATCH] route wildcards suppoort substr --- tree.go | 14 ++++++++++++++ tree_test.go | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/tree.go b/tree.go index 817bed9..be11835 100755 --- a/tree.go +++ b/tree.go @@ -4,6 +4,7 @@ import ( "errors" "net/http" "path" + "regexp" "strings" ) @@ -57,6 +58,19 @@ func (t *tree) Lookup(path string) http.HandlerFunc { foo(w, r) } } + } else { + for k, n := range t.next { + if !strings.Contains(k, Wildcard) { + continue + } + re := regexp.MustCompile(strings.ReplaceAll(k, Wildcard, ".*")) + if re.MatchString(key) && n.handler != nil { + return func(w http.ResponseWriter, r *http.Request) { + r.Header.Add(WildcardHeader, key) + n.handler(w, r) + } + } + } } return nil } diff --git a/tree_test.go b/tree_test.go index 765c293..4204c98 100755 --- a/tree_test.go +++ b/tree_test.go @@ -82,6 +82,18 @@ func TestTreeInsertLookup(t *testing.T) { } } +func TestTreeWildcardSubstr(t *testing.T) { + tree := newTree() + foo := func(w http.ResponseWriter, r *http.Request) { + } + if err := tree.Insert("/prefix-"+Wildcard, foo); err != nil { + t.Fatal(err) + } + if foo := tree.Lookup("/prefix-suffix"); foo == nil { + t.Error(foo) + } +} + func TestTreeWildcard(t *testing.T) { tree := newTree() checked := false