From 8fd712f790e22f94b26a671c28992369068b8529 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sun, 27 Nov 2022 22:16:19 +0100 Subject: [PATCH] Add cmd/route.go --- cmd/route.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 cmd/route.go diff --git a/cmd/route.go b/cmd/route.go new file mode 100644 index 0000000..37cc5cc --- /dev/null +++ b/cmd/route.go @@ -0,0 +1,37 @@ +package main + +import "net/http" + +type Handler interface { + Response(*http.Request) *ResponseWithHeader +} + +type routeFunc func(*http.Request) bool + +type route struct { + routeFunc + Handler +} + +type Router struct { + rt []route +} + +func (r *Router) Route(req *http.Request) Handler { + for _, re := range r.rt { + if re.routeFunc(req) { + return re.Handler + } + } + return nil +} + +func (r *Router) AddPath(path string, handler Handler) { + r.rt = append(r.rt, route{routePath(path), handler}) +} + +func routePath(path string) routeFunc { + return routeFunc(func(req *http.Request) bool { + return req.URL.Path == path + }) +}