Files
retoor 3c4334cec9 feat: implement MoloApp plans 01-15 with integration
Full C++23 framework tree: runtime, observability, security,
data, app, realtime, supervisor, clients, CLI, example plus
enterprise tenancy, audit, operability, governance,
supplychain. Postgres via docker compose for tests.
2026-10-23 18:20:04 +02:00

53 lines
1.6 KiB
C++

#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 <functional>
#include <string>
#include <vector>
#include "Http.hpp"
namespace molo::example::fw {
using Handler = std::function<Response(Request)>;
struct Route {
std::vector<Method> methods;
std::string pattern;
std::string name;
Handler handler;
};
class Router {
public:
void add(std::vector<Method> 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<Method> 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<Route>& routes() const;
private:
std::vector<Route> routes_;
};
bool match_pattern(std::string_view pattern, std::string_view path,
std::map<std::string, std::string>& params);
} // namespace molo::example::fw