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.
53 lines
1.6 KiB
C++
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
|