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