#pragma once #include #include #include #include #include #include #include "http_server.h" #include "utility.h" #include "routing.h" // TEST #include #define FLASK_ROUTE(app, url) app.route(url) namespace flask { class Flask { public: Flask() { } response handle(const request& req) { return router_.handle(req); } template auto route(std::string&& rule) -> typename std::result_of)(Router, std::string&&)>::type { return router_.new_rule_tagged(std::move(rule)); } auto route(std::string&& rule) -> typename std::result_of::type { return router_.new_rule(std::move(rule)); } Flask& port(std::uint16_t port) { port_ = port; return *this; } void validate() { router_.validate(); } void run() { validate(); Server server(this, port_); server.run(); } void debug_print() { std::cerr << "Routing:" << std::endl; router_.debug_print(); } private: uint16_t port_ = 80; Router router_; }; };