From fd3625802b409e70c6b200a6c98542197c684827 Mon Sep 17 00:00:00 2001 From: what Date: Tue, 26 Nov 2024 16:45:45 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E5=AE=8C=E5=96=84=20Router.Call=20Rou?= =?UTF-8?q?ter.Get=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routing.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/routing.go b/routing.go index f6626ed..9b72ab2 100755 --- a/routing.go +++ b/routing.go @@ -80,8 +80,8 @@ type RouteMiddleware interface { } type Router interface { - Call(r *http.Request, code string, params map[string]any, category ...RouteCategory) (HttpResponse, error) - Get(uuid string, category ...RouteCategory) (Route, bool) + Call(r *http.Request, code string, params map[string]any, opts ..._RouteFilter) (HttpResponse, error) + Get(uuid string, opts ..._RouteFilter) (Route, bool) Register(cr chi.Router) RefreshRoutes() error } @@ -107,3 +107,28 @@ type RouteParam interface { IsRequired() bool InjectRequestToGlobalParams(*http.Request, GlobalParams) error } + +type _RouteFilter func(opts *RouteFilterOption) +type RouteFilterOption struct { + categories []RouteCategory + services []RouteService +} + +func (this RouteFilterOption) RouteCategories() []RouteCategory { + return this.categories +} + +func (this RouteFilterOption) RouteServices() []RouteService { + return this.services +} + +func RouteFilter[T RouteCategory | RouteService](v T) _RouteFilter { + return func(opt *RouteFilterOption) { + switch value := any(v).(type) { + case RouteCategory: + opt.categories = append(opt.categories, value) + case RouteService: + opt.services = append(opt.services, value) + } + } +}