1// Copyright (C) 2024 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 QFORMDATABUILDER_H
5#define QFORMDATABUILDER_H
6
7#include <QtNetwork/qtnetworkglobal.h>
8#include <QtNetwork/qhttpheaders.h>
9#include <QtNetwork/qhttpmultipart.h>
10
11#include <QtCore/qbytearray.h>
12#include <QtCore/qflags.h>
13#include <QtCore/qiodevice.h>
14#include <QtCore/qstring.h>
15
16#include <memory>
17#include <variant>
18
19#ifndef Q_OS_WASM
20QT_REQUIRE_CONFIG(http);
21#endif
22
23QT_BEGIN_NAMESPACE
24
25class QHttpPartPrivate;
26class QHttpMultiPart;
27class QDebug;
28
29class QFormDataBuilderPrivate;
30class QFormDataPartBuilderPrivate;
31
32class QFormDataPartBuilder
33{
34 QFormDataPartBuilder(QFormDataBuilderPrivate *qfdb, qsizetype idx) : d(qfdb), m_index(idx) {}
35public:
36 void swap(QFormDataPartBuilder &other) noexcept
37 {
38 qt_ptr_swap(lhs&: d, rhs&: other.d);
39 std::swap(a&: m_index, b&: other.m_index);
40 }
41
42 QFormDataPartBuilder() = default;
43 // Rule of zero applies
44
45 Q_WEAK_OVERLOAD QFormDataPartBuilder setBody(const QByteArray &data,
46 QAnyStringView fileName = {},
47 QAnyStringView mimeType = {})
48 { return setBodyHelper(data, fileName, mimeType); }
49
50 Q_NETWORK_EXPORT QFormDataPartBuilder setBody(QByteArrayView data,
51 QAnyStringView fileName = {},
52 QAnyStringView mimeType = {});
53 Q_NETWORK_EXPORT QFormDataPartBuilder setBodyDevice(QIODevice *body,
54 QAnyStringView fileName = {},
55 QAnyStringView mimeType = {});
56 Q_NETWORK_EXPORT QFormDataPartBuilder setHeaders(const QHttpHeaders &headers);
57private:
58 Q_NETWORK_EXPORT QFormDataPartBuilder setBodyHelper(const QByteArray &data,
59 QAnyStringView fileName,
60 QAnyStringView mimeType);
61
62 QFormDataPartBuilderPrivate* d_func();
63 const QFormDataPartBuilderPrivate* d_func() const;
64
65 QFormDataBuilderPrivate *d;
66 size_t m_index;
67
68 friend class QFormDataBuilder;
69};
70
71Q_DECLARE_SHARED(QFormDataPartBuilder)
72
73class QFormDataBuilder
74{
75public:
76 enum class Option {
77 Default = 0x00,
78 OmitRfc8187EncodedFilename = 0x01,
79 UseRfc7578PercentEncodedFilename = 0x02,
80 PreferLatin1EncodedFilename = 0x04,
81
82 StrictRfc7578 = OmitRfc8187EncodedFilename | UseRfc7578PercentEncodedFilename,
83 };
84 Q_DECLARE_FLAGS(Options, Option)
85
86 Q_NETWORK_EXPORT QFormDataBuilder();
87
88 QFormDataBuilder(QFormDataBuilder &&other) noexcept : d_ptr(std::exchange(obj&: other.d_ptr, new_val: nullptr)) {}
89
90 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFormDataBuilder)
91 void swap(QFormDataBuilder &other) noexcept
92 {
93 qt_ptr_swap(lhs&: d_ptr, rhs&: other.d_ptr);
94 }
95
96 Q_NETWORK_EXPORT ~QFormDataBuilder();
97 Q_NETWORK_EXPORT QFormDataPartBuilder part(QAnyStringView name);
98 Q_NETWORK_EXPORT std::unique_ptr<QHttpMultiPart> buildMultiPart(Options options = {});
99private:
100 QFormDataBuilderPrivate *d_ptr;
101
102 Q_DECLARE_PRIVATE(QFormDataBuilder)
103 Q_DISABLE_COPY(QFormDataBuilder)
104};
105Q_DECLARE_OPERATORS_FOR_FLAGS(QFormDataBuilder::Options)
106
107Q_DECLARE_SHARED(QFormDataBuilder)
108
109QT_END_NAMESPACE
110
111#endif // QFORMDATABUILDER_H
112

Provided by KDAB

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

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