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
Juha Vuolle 2024-02-09 12:46:58 +02:00
parent 6bf3f7ebdc
commit 3044a8ae27
2 changed files with 30 additions and 27 deletions

View File

@ -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);
}

View File

@ -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);
}