#pragma once // Router: FastAPI-style route groups mounted on the app with a shared prefix. // Gap: real molo::routing in 05-request-routing.md owns path compilation, // url_for and converters; this skeleton supports {param} segments only. #include #include #include #include "Http.hpp" namespace molo::example::fw { using Handler = std::function; struct Route { std::vector methods; std::string pattern; std::string name; Handler handler; }; class Router { public: void add(std::vector methods, std::string pattern, std::string name, Handler handler); void get(std::string pattern, std::string name, Handler handler); void post(std::string pattern, std::string name, Handler handler); void put(std::string pattern, std::string name, Handler handler); void patch(std::string pattern, std::string name, Handler handler); void del(std::string pattern, std::string name, Handler handler); void options(std::string pattern, std::string name, Handler handler); void any(std::vector methods, std::string pattern, std::string name, Handler handler); void include_router(const std::string& prefix, const Router& other, const std::string& name_prefix = ""); bool match(Request& req, Handler& out) const; const std::vector& routes() const; private: std::vector routes_; }; bool match_pattern(std::string_view pattern, std::string_view path, std::map& params); } // namespace molo::example::fw