Change QRestAccessManager executeRequest() to use function_ref
Drop the templated executeRequest functions in favor of qxp::function_ref for readability and type safety. Pick-to: 6.7 Task-number: QTBUG-122018 Change-Id: I36c07ff5fe6d2025459fe3f7190bc29901a320ce Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>bb10
parent
6bf3f7ebdc
commit
3044a8ae27
|
|
@ -569,7 +569,7 @@ QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &reque
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&](auto req, auto json) { return d->qnam->post(req, json); },
|
||||
return d->executeRequest([](auto qnam, auto req, auto data) { return qnam->post(req, data); },
|
||||
data, request, context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -585,7 +585,7 @@ QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &reque
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->post(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->post(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -593,7 +593,7 @@ QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &reque
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->post(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->post(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -601,14 +601,14 @@ QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &reque
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->post(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->post(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::getNoDataImpl(const QNetworkRequest &request,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->get(request); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->get(request); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -616,7 +616,7 @@ QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->get(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->get(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -624,7 +624,7 @@ QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&](auto req, auto json) { return d->qnam->get(req, json); },
|
||||
return d->executeRequest([](auto qnam, auto req, auto data) { return qnam->get(req, data); },
|
||||
data, request, context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -633,21 +633,21 @@ QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->get(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->get(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::deleteResourceNoDataImpl(const QNetworkRequest &request,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->deleteResource(request); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->deleteResource(request); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::headNoDataImpl(const QNetworkRequest &request,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->head(request); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->head(request); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -655,7 +655,7 @@ QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&](auto req, auto json) { return d->qnam->put(req, json); },
|
||||
return d->executeRequest([](auto qnam, auto req, auto data) { return qnam->put(req, data); },
|
||||
data, request, context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -671,7 +671,7 @@ QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->put(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->put(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -679,14 +679,14 @@ QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &reques
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->put(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->put(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request, QIODevice *data,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->put(request, data); }, context, slot);
|
||||
return d->executeRequest([&](auto qnam) { return qnam->put(request, data); }, context, slot);
|
||||
}
|
||||
|
||||
static const auto PATCH = "PATCH"_ba;
|
||||
|
|
@ -697,8 +697,8 @@ QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &requ
|
|||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest(
|
||||
[&](auto req, auto json){ return d->qnam->sendCustomRequest(req, PATCH, json); },
|
||||
data, request, context, slot);
|
||||
[](auto qnam, auto req, auto data) { return qnam->sendCustomRequest(req, PATCH, data); },
|
||||
data, request, context, slot);
|
||||
}
|
||||
|
||||
QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &request,
|
||||
|
|
@ -713,7 +713,7 @@ QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &requ
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->sendCustomRequest(request, PATCH, data); },
|
||||
return d->executeRequest([&](auto qnam) { return qnam->sendCustomRequest(request, PATCH, data); },
|
||||
context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -721,7 +721,7 @@ QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &requ
|
|||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->sendCustomRequest(request, PATCH, data); },
|
||||
return d->executeRequest([&](auto qnam) { return qnam->sendCustomRequest(request, PATCH, data); },
|
||||
context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -731,7 +731,7 @@ QNetworkReply *QRestAccessManager::customWithDataImpl(const QNetworkRequest &req
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->sendCustomRequest(request, method, data); },
|
||||
return d->executeRequest([&](auto qnam) { return qnam->sendCustomRequest(request, method, data); },
|
||||
context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -741,7 +741,7 @@ QNetworkReply *QRestAccessManager::customWithDataImpl(const QNetworkRequest &req
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->sendCustomRequest(request, method, data); },
|
||||
return d->executeRequest([&](auto qnam) { return qnam->sendCustomRequest(request, method, data); },
|
||||
context, slot);
|
||||
}
|
||||
|
||||
|
|
@ -751,7 +751,7 @@ QNetworkReply *QRestAccessManager::customWithDataImpl(const QNetworkRequest &req
|
|||
QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
Q_D(QRestAccessManager);
|
||||
return d->executeRequest([&]() { return d->qnam->sendCustomRequest(request, method, data); },
|
||||
return d->executeRequest([&](auto qnam) { return qnam->sendCustomRequest(request, method, data); },
|
||||
context, slot);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include <QtCore/qhash.h>
|
||||
#include <QtCore/qjsondocument.h>
|
||||
#include <QtCore/qjsonobject.h>
|
||||
#include <QtCore/qxpfunctional.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
@ -38,19 +39,21 @@ public:
|
|||
QtPrivate::QSlotObjectBase *slot);
|
||||
void handleReplyFinished(QNetworkReply *reply);
|
||||
|
||||
template<typename Functor>
|
||||
QNetworkReply *executeRequest(Functor requestOperation,
|
||||
using ReqOpRef = qxp::function_ref<QNetworkReply*(QNetworkAccessManager*) const>;
|
||||
QNetworkReply *executeRequest(ReqOpRef requestOperation,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
if (!qnam)
|
||||
return warnNoAccessManager();
|
||||
verifyThreadAffinity(context);
|
||||
QNetworkReply *reply = requestOperation();
|
||||
QNetworkReply *reply = requestOperation(qnam);
|
||||
return createActiveRequest(reply, context, slot);
|
||||
}
|
||||
|
||||
template<typename Functor>
|
||||
QNetworkReply *executeRequest(Functor requestOperation, const QJsonDocument &jsonDoc,
|
||||
using ReqOpRefJson = qxp::function_ref<QNetworkReply*(QNetworkAccessManager*,
|
||||
const QNetworkRequest &,
|
||||
const QByteArray &) const>;
|
||||
QNetworkReply *executeRequest(ReqOpRefJson requestOperation, const QJsonDocument &jsonDoc,
|
||||
const QNetworkRequest &request,
|
||||
const QObject *context, QtPrivate::QSlotObjectBase *slot)
|
||||
{
|
||||
|
|
@ -62,7 +65,7 @@ public:
|
|||
req.setHeader(QNetworkRequest::ContentTypeHeader,
|
||||
QLatin1StringView{"application/json"});
|
||||
}
|
||||
QNetworkReply *reply = requestOperation(req, jsonDoc.toJson(QJsonDocument::Compact));
|
||||
QNetworkReply *reply = requestOperation(qnam, req, jsonDoc.toJson(QJsonDocument::Compact));
|
||||
return createActiveRequest(reply, context, slot);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue