Support not in rules definition

This commit is contained in:
Julien Salleyron 2021-05-31 18:58:05 +02:00 committed by GitHub
parent b1fd3b8fc7
commit dd04c432e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 142 additions and 3 deletions

View file

@ -72,6 +72,7 @@ func (r *Router) AddRoute(rule string, priority int, handler http.Handler) error
type tree struct {
matcher string
not bool
value []string
ruleLeft *tree
ruleRight *tree
@ -215,10 +216,27 @@ func addRuleOnRouter(router *mux.Router, rule *tree) error {
return err
}
if rule.not {
return not(funcs[rule.matcher])(router.NewRoute(), rule.value...)
}
return funcs[rule.matcher](router.NewRoute(), rule.value...)
}
}
func not(m func(*mux.Route, ...string) error) func(*mux.Route, ...string) error {
return func(r *mux.Route, v ...string) error {
router := mux.NewRouter()
err := m(router.NewRoute(), v...)
if err != nil {
return err
}
r.MatcherFunc(func(req *http.Request, ma *mux.RouteMatch) bool {
return !router.Match(req, ma)
})
return nil
}
}
func addRuleOnRoute(route *mux.Route, rule *tree) error {
switch rule.matcher {
case "and":
@ -243,6 +261,9 @@ func addRuleOnRoute(route *mux.Route, rule *tree) error {
return err
}
if rule.not {
return not(funcs[rule.matcher])(route, rule.value...)
}
return funcs[rule.matcher](route, rule.value...)
}
}