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

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtbase/src/network/access/qrestaccessmanager.h