From 02a6271980981dee118658b7a605f81725221dfa Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Wed, 23 Jan 2019 12:09:19 +0100 Subject: [PATCH] Make all http routes move-only --- src/App.h | 42 +++++++++++++++++++++--------------------- src/HttpContext.h | 6 ++++-- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/App.h b/src/App.h index f7afcf6..1236af7 100644 --- a/src/App.h +++ b/src/App.h @@ -223,58 +223,58 @@ public: })); } - TemplatedApp &&get(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("get", pattern, handler); + TemplatedApp &&get(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("get", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&post(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("post", pattern, handler); + TemplatedApp &&post(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("post", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&options(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("options", pattern, handler); + TemplatedApp &&options(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("options", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&del(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("delete", pattern, handler); + TemplatedApp &&del(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("delete", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&patch(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("patch", pattern, handler); + TemplatedApp &&patch(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("patch", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&put(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("put", pattern, handler); + TemplatedApp &&put(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("put", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&head(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("head", pattern, handler); + TemplatedApp &&head(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("head", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&connect(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("connect", pattern, handler); + TemplatedApp &&connect(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("connect", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&trace(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("trace", pattern, handler); + TemplatedApp &&trace(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("trace", pattern, std::move(handler)); return std::move(*this); } /* This one catches any method */ - TemplatedApp &&any(std::string pattern, std::function *, HttpRequest *)> handler) { - httpContext->onHttp("*", pattern, handler); + TemplatedApp &&any(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { + httpContext->onHttp("*", pattern, std::move(handler)); return std::move(*this); } - TemplatedApp &&listen(int port, std::function handler) { + TemplatedApp &&listen(int port, fu2::unique_function &&handler) { handler(httpContext->listen(nullptr, port, 0)); return std::move(*this); } diff --git a/src/HttpContext.h b/src/HttpContext.h index 87c221a..e1c2dbe 100644 --- a/src/HttpContext.h +++ b/src/HttpContext.h @@ -30,6 +30,8 @@ #include #include +#include "f2/function2.hpp" + namespace uWS { template struct HttpResponse; @@ -306,10 +308,10 @@ public: } /* Register an HTTP route handler acording to URL pattern */ - void onHttp(std::string method, std::string pattern, std::function *, uWS::HttpRequest *)> handler) { + void onHttp(std::string method, std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { HttpContextData *httpContextData = getSocketContextData(); - httpContextData->router.add(method, pattern, [handler](typename HttpContextData::RouterData &user, std::pair params) { + httpContextData->router.add(method, pattern, [handler = std::move(handler)](typename HttpContextData::RouterData &user, std::pair params) mutable { user.httpRequest->setYield(false); user.httpRequest->setParameters(params); handler(user.httpResponse, user.httpRequest);