26 #include <initializer_list>
42 using Logger = std::function<void(
const std::string&)>;
66 Registrar with(
const std::string& prefix, Middleware m)
const;
67 Registrar with_prefix(
const std::string& prefix)
const;
68 Registrar with_middleware(Middleware m)
const;
69 std::string prefix()
const {
return prefix_; }
70 Middleware middleware()
const {
return middleware_; }
71 virtual void register_handler(
const std::string& route,
cloe::Handler h);
74 Registrar(
const std::string& prefix, Middleware m) : prefix_(prefix), middleware_(m) {}
79 Middleware middleware_;
85 ProxyRegistrar(
const std::map<T, Registrar*>& registrars,
const std::string& prefix, Middleware m)
86 : registrars_(registrars), prefix_(prefix), middleware_(m) {}
87 explicit ProxyRegistrar(std::initializer_list<std::pair<T, Registrar*>> registrars) {
88 for (
auto p : registrars) {
89 registrars_[p.first] = p.second;
94 assert(prefix.size() == 0 || prefix[0] ==
'/');
99 assert(prefix.size() > 0 && prefix[0] ==
'/');
104 assert(m !=
nullptr);
108 std::string prefix()
const {
return prefix_; }
109 Middleware middleware()
const {
return middleware_; }
111 void register_handler(
const std::string& route, T select,
cloe::Handler h) {
112 assert(route.size() != 0 && route[0] ==
'/');
113 assert(registrars_.size() != 0);
117 auto endpoint = route;
118 if (prefix_.size() != 0) {
119 endpoint = prefix_ + route;
121 registrars_.at(select)->register_handler(endpoint, h);
125 std::map<T, Registrar*> registrars_;
127 Middleware middleware_;
140 assert(server_ !=
nullptr);
144 assert(server_ !=
nullptr);
145 assert(prefix_.size() == 0 || prefix_[0] ==
'/');
149 void register_handler(
const std::string& route,
cloe::Handler h)
override;
151 void set_prefix(
const std::string& prefix) { prefix_ = prefix; }
152 void set_logger(Logger logger) { logger_ = logger; }
154 const std::vector<std::string>& endpoints()
const {
return endpoints_; }
157 void log(
const std::string& endpoint) {
166 std::vector<std::string> endpoints_;
182 using StaticRegistrar::StaticRegistrar;
184 void register_handler(
const std::string& route,
cloe::Handler h)
override;
191 std::unique_lock<std::shared_mutex>
lock() {
192 return std::unique_lock(access_);
196 mutable std::shared_mutex access_;
219 using StaticRegistrar::StaticRegistrar;
245 mutable std::shared_mutex access_;
Definition: registrar.hpp:217
void refresh_buffer()
Definition: registrar.cpp:129
void register_handler(const std::string &route, cloe::Handler h) override
Definition: registrar.cpp:107
void refresh_route(const std::string &key)
Definition: registrar.cpp:138
Definition: registrar.hpp:180
std::unique_lock< std::shared_mutex > lock()
Definition: registrar.hpp:191
Definition: registrar.hpp:83
Definition: registrar.hpp:61
Definition: server.hpp:44
Definition: registrar.hpp:137
std::function< void(const Request &, Response &)> Handler
Definition: cloe_fwd.hpp:65
Middleware chain_middleware(Middleware x, Middleware y)
Definition: registrar.cpp:39