#pragma once #include "http_request.h" #include "http_response.h" namespace crow { // Any middleware requires following 3 members: // struct context; // storing data for the middleware; can be read from another middleware or handlers // template // void before_handle(request& req, response& res, context& ctx, AllContext& all_ctx) // called before handling the request. // if res.end() is called, the operation is halted. // (still call after_handle of this middleware) // template // void after_handle(request& req, response& res, context& ctx, AllContext& all_ctx) // called after handling the request. class CookieParser { struct context { std::unordered_map jar; }; template void before_handle(request& req, response& res, context& ctx, AllContext& all_ctx) { // ctx == all_ctx.bind() // ctx.jar[] = ; } template void after_handle(request& req, response& res, context& ctx, AllContext& all_ctx) { } } /* App app; A B C A::context int aa; ctx1 : public A::context ctx2 : public ctx1, public B::context ctx3 : public ctx2, public C::context C depends on A C::handle context.aaa App::context : private CookieParser::contetx, ... { jar } SimpleApp */ }