diff options
author | Mikhail Svetkin <mikhail.svetkin@gmail.com> | 2019-09-01 21:33:22 +0200 |
---|---|---|
committer | Mikhail Svetkin <mikhail.svetkin@gmail.com> | 2019-10-25 08:55:01 +0200 |
commit | 43a04e17a1e10425da84b6c725a03dc87834b64a (patch) | |
tree | 22d69ba5a1876efde769ba550a9dac955acd780b /src | |
parent | e35fdc4763a54aff3768bcd0144ae97249bd7185 (diff) |
Allow using QHttpServerRequest/Responder at the same time
Fixes: QTBUG-77088
Change-Id: I2208cee290d086339aba705f959c57e0f6a73a87
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/httpserver/qhttpserver.h | 24 | ||||
-rw-r--r-- | src/httpserver/qhttpserverrouterviewtraits.h | 4 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/httpserver/qhttpserver.h b/src/httpserver/qhttpserver.h index d5ebdcb..80bad2c 100644 --- a/src/httpserver/qhttpserver.h +++ b/src/httpserver/qhttpserver.h @@ -112,7 +112,16 @@ private: } template<typename ViewTraits, typename T> - typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value, void>::type + typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value && + ViewTraits::Arguments::PlaceholdersCount == 2, void>::type + responseImpl(T &boundViewHandler, const QHttpServerRequest &request, QTcpSocket *socket) + { + boundViewHandler(makeResponder(request, socket), request); + } + + template<typename ViewTraits, typename T> + typename std::enable_if<ViewTraits::Arguments::Last::IsRequest::Value && + ViewTraits::Arguments::PlaceholdersCount == 1, void>::type responseImpl(T &boundViewHandler, const QHttpServerRequest &request, QTcpSocket *socket) { const QHttpServerResponse response(boundViewHandler(request)); @@ -120,7 +129,18 @@ private: } template<typename ViewTraits, typename T> - typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value, void>::type + typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value && + ViewTraits::Arguments::PlaceholdersCount == 2, void>::type + responseImpl(T &boundViewHandler, + const QHttpServerRequest &request, + QTcpSocket *socket) + { + boundViewHandler(request, makeResponder(request, socket)); + } + + template<typename ViewTraits, typename T> + typename std::enable_if<ViewTraits::Arguments::Last::IsResponder::Value && + ViewTraits::Arguments::PlaceholdersCount == 1, void>::type responseImpl(T &boundViewHandler, const QHttpServerRequest &request, QTcpSocket *socket) diff --git a/src/httpserver/qhttpserverrouterviewtraits.h b/src/httpserver/qhttpserverrouterviewtraits.h index b4ce4fb..377811c 100644 --- a/src/httpserver/qhttpserverrouterviewtraits.h +++ b/src/httpserver/qhttpserverrouterviewtraits.h @@ -169,8 +169,10 @@ struct ViewTraitsHelper { static constexpr bool TypeMatched = isType<CleanTypeT, true>(); static constexpr bool TypeCVRefMatched = isType<T>(); + static constexpr bool ValidPosition = - (I == FunctionTraits::ArgumentIndexMax); + (I == FunctionTraits::ArgumentIndexMax || + I == FunctionTraits::ArgumentIndexMax - 1); static constexpr bool ValidAll = TypeCVRefMatched && ValidPosition; static constexpr bool assertCondition = |