From 6c5d5fec129a29c6250b094f46881cfa5aaadcc7 Mon Sep 17 00:00:00 2001 From: rebecca Date: Thu, 17 Sep 2026 20:54:44 +0100 Subject: web: import from m1msq 15b348f --- web/router.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 web/router.lua (limited to 'web/router.lua') diff --git a/web/router.lua b/web/router.lua new file mode 100644 index 0000000..09be12a --- /dev/null +++ b/web/router.lua @@ -0,0 +1,20 @@ +local fail = require'lib.fail' +local class = require'r.class' +local pprint = require'pprint' +local Router = class() +function Router.make(cls) return setmetatable({routes={}},cls) end +function Router._add(self, patt,israw,view) + table.insert(self.routes,{patt=patt,israw=israw,view=view}) end +function Router.path(self, path, view) self:_add(path,true,view) end +function Router.patt(self, patt, view) self:_add(patt,false,view) end +-- todo: recursion +function Router.__call(self, req) for _,r in ipairs(self.routes) do + local s = { req.path:find(r.patt,1,r.israw) } + if s[1] then return r.view(req, table.unpack(s,3)) end end + fail(404) +end + +return Router + +-- view protocol: +-- view: callable(req) -> (body,headers,status) -- cgit v1.2.3