From ab1063c046b363a37ccaf91c7dfb1fecd279be36 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Mon, 8 Sep 2014 07:07:53 +0900 Subject: complete middleware implementation --- include/middleware_context.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'include/middleware_context.h') diff --git a/include/middleware_context.h b/include/middleware_context.h index 6dbf923..980a821 100644 --- a/include/middleware_context.h +++ b/include/middleware_context.h @@ -11,22 +11,47 @@ namespace crow : public black_magic::pop_back::template rebind , public black_magic::last_element_type::type::context { + using parent_context = typename black_magic::pop_back::template rebind<::crow::detail::partial_context>; + template + using partial = typename std::conditional>::type; + + template + typename T::context& get() + { + return static_cast(*this); + } }; template <> struct partial_context<> { + template + using partial = partial_context; }; + template + bool middleware_call_helper(Container& middlewares, request& req, response& res, Context& ctx); + template struct context : private partial_context //struct context : private Middlewares::context... // simple but less type-safe { + template + friend typename std::enable_if<(N==0)>::type after_handlers_call_helper(Container& middlewares, Context& ctx, request& req, response& res); + template + friend typename std::enable_if<(N>0)>::type after_handlers_call_helper(Container& middlewares, Context& ctx, request& req, response& res); + + template + friend bool middleware_call_helper(Container& middlewares, request& req, response& res, Context& ctx); + template typename T::context& get() { return static_cast(*this); } + + template + using partial = typename partial_context::template partial; }; } } -- cgit v1.2.3-54-g00ecf