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) + } + } +}