Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qrestaccessmanager.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QRESTACCESSMANAGER_H
6#define QRESTACCESSMANAGER_H
7
8#if 0
9#pragma qt_class(QRestAccessManager)
10#endif
11
12#include <QtNetwork/qnetworkaccessmanager.h>
13
14QT_BEGIN_NAMESPACE
15
16class QDebug;
17class QRestReply;
18
19#define QREST_METHOD_WITH_DATA(METHOD, DATA) public
20 : template
21 <typename Functor, if_compatible_callback<Functor> = true> QNetworkReply
22 *METHOD(const QNetworkRequest &request, DATA data,
23 const ContextTypeForFunctor<Functor> *context,
24 Functor &&callback) \
25{
26 return METHOD##WithDataImpl(request, data, context,
27 QtPrivate::makeCallableObject<CallbackPrototype>(std::forward<Functor>(callback))); \
28} QNetworkReply
29 *METHOD(const QNetworkRequest &request, DATA data) \
30{
31 return METHOD##WithDataImpl(request, data, nullptr, nullptr); \
32} private
33 : QNetworkReply
34 *METHOD##WithDataImpl(const QNetworkRequest &request, DATA data,
35 const QObject *context, QtPrivate::QSlotObjectBase *slot); \
36/* end */
37
38#define QREST_METHOD_NO_DATA(METHOD) public
39 : template
40 <typename Functor, if_compatible_callback<Functor> = true> QNetworkReply
41 *METHOD(const QNetworkRequest &request,
42 const ContextTypeForFunctor<Functor> *context,
43 Functor &&callback) \
44{
45 return METHOD##NoDataImpl(request, context,
46 QtPrivate::makeCallableObject<CallbackPrototype>(std::forward<Functor>(callback))); \
47} QNetworkReply
48 *METHOD(const QNetworkRequest &request) \
49{
50 return METHOD##NoDataImpl(request, nullptr, nullptr); \
51} private
52 : QNetworkReply
53 *METHOD##NoDataImpl(const QNetworkRequest &request,
54 const QObject *context, QtPrivate::QSlotObjectBase *slot); \
55/* end */
56
57#define QREST_METHOD_CUSTOM_WITH_DATA(DATA) public
58 : template
59 <typename Functor, if_compatible_callback<Functor> = true> QNetworkReply
60 *sendCustomRequest(const QNetworkRequest& request, const QByteArray &method, DATA data,
61 const ContextTypeForFunctor<Functor> *context,
62 Functor &&callback) \
63{
64 return customWithDataImpl(request, method, data, context,
65 QtPrivate::makeCallableObject<CallbackPrototype>(std::forward<Functor>(callback))); \
66} QNetworkReply
67 *sendCustomRequest(const QNetworkRequest& request, const QByteArray &method, DATA data) \
68{
69 return customWithDataImpl(request, method, data, nullptr, nullptr); \
70} private
71 : QNetworkReply
72 *customWithDataImpl(const QNetworkRequest& request, const QByteArray &method,
73 DATA data, const QObject* context,
74 QtPrivate::QSlotObjectBase *slot); \
75/* end */
76
78class Q_NETWORK_EXPORT QRestAccessManager : public QObject
79{
80 Q_OBJECT
81 using CallbackPrototype = void(*)(QRestReply&);
82 template <typename Functor>
83 using ContextTypeForFunctor = typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType;
84 template <typename Functor>
85 using if_compatible_callback = std::enable_if_t<
86 QtPrivate::AreFunctionsCompatible<CallbackPrototype, Functor>::value, bool>;
87public:
88 explicit QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr);
89 ~QRestAccessManager() override;
90
91 QNetworkAccessManager *networkAccessManager() const;
92
93 QREST_METHOD_NO_DATA(deleteResource)
96 QREST_METHOD_WITH_DATA(get, const QByteArray &)
97 QREST_METHOD_WITH_DATA(get, const QJsonDocument &)
98 QREST_METHOD_WITH_DATA(get, QIODevice *)
99 QREST_METHOD_WITH_DATA(post, const QJsonDocument &)
100 QREST_METHOD_WITH_DATA(post, const QVariantMap &)
101 QREST_METHOD_WITH_DATA(post, const QByteArray &)
102 QREST_METHOD_WITH_DATA(post, QHttpMultiPart *)
103 QREST_METHOD_WITH_DATA(post, QIODevice *)
104 QREST_METHOD_WITH_DATA(put, const QJsonDocument &)
105 QREST_METHOD_WITH_DATA(put, const QVariantMap &)
106 QREST_METHOD_WITH_DATA(put, const QByteArray &)
107 QREST_METHOD_WITH_DATA(put, QHttpMultiPart *)
108 QREST_METHOD_WITH_DATA(put, QIODevice *)
109 QREST_METHOD_WITH_DATA(patch, const QJsonDocument &)
110 QREST_METHOD_WITH_DATA(patch, const QVariantMap &)
111 QREST_METHOD_WITH_DATA(patch, const QByteArray &)
112 QREST_METHOD_WITH_DATA(patch, QIODevice *)
113 QREST_METHOD_CUSTOM_WITH_DATA(const QByteArray &)
115 QREST_METHOD_CUSTOM_WITH_DATA(QHttpMultiPart *)
116
117private:
118 Q_DECLARE_PRIVATE(QRestAccessManager)
119 Q_DISABLE_COPY(QRestAccessManager)
120};
121
122#undef QREST_METHOD_NO_DATA
123#undef QREST_METHOD_WITH_DATA
124#undef QREST_METHOD_CUSTOM_WITH_DATA
125
126QT_END_NAMESPACE
127
128#endif
void verifyThreadAffinity(const QObject *contextObject)
The QRestAccessManager is a convenience wrapper for QNetworkAccessManager.
QRestReply is a convenience wrapper for QNetworkReply.
Definition qrestreply.h:25
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
static const QByteArray & PATCH()
#define QREST_METHOD_CUSTOM_WITH_DATA(DATA)
#define QREST_METHOD_NO_DATA(METHOD)
#define QREST_METHOD_WITH_DATA(METHOD, DATA)