1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QGRPCHANNELOPTIONS_H
5#define QGRPCHANNELOPTIONS_H
6
7#include <QtGrpc/qtgrpcglobal.h>
8#include <QtGrpc/qtgrpcnamespace.h>
9
10#if QT_CONFIG(ssl)
11# include <QtNetwork/qsslconfiguration.h>
12#endif
13
14#include <QtCore/qhash.h>
15#include <QtCore/qshareddata.h>
16#include <QtCore/qstringfwd.h>
17#include <QtCore/qtclasshelpermacros.h>
18#include <QtCore/qtdeprecationdefinitions.h>
19
20#include <chrono>
21#include <optional>
22
23QT_BEGIN_NAMESPACE
24
25class QDebug;
26class QVariant;
27class QGrpcSerializationFormat;
28
29class QGrpcChannelOptionsPrivate;
30QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QGrpcChannelOptionsPrivate)
31
32class QGrpcChannelOptions final
33{
34public:
35 Q_GRPC_EXPORT QGrpcChannelOptions();
36 Q_GRPC_EXPORT ~QGrpcChannelOptions();
37
38 Q_GRPC_EXPORT QGrpcChannelOptions(const QGrpcChannelOptions &other);
39 Q_GRPC_EXPORT QGrpcChannelOptions &operator=(const QGrpcChannelOptions &other);
40
41 QGrpcChannelOptions(QGrpcChannelOptions &&other) noexcept = default;
42 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QGrpcChannelOptions)
43
44 Q_GRPC_EXPORT Q_IMPLICIT operator QVariant() const;
45
46 void swap(QGrpcChannelOptions &other) noexcept { d_ptr.swap(other&: other.d_ptr); }
47
48 [[nodiscard]] Q_GRPC_EXPORT std::optional<std::chrono::milliseconds>
49 deadlineTimeout() const noexcept;
50 Q_GRPC_EXPORT QGrpcChannelOptions &setDeadlineTimeout(std::chrono::milliseconds timeout);
51
52#if QT_DEPRECATED_SINCE(6, 13)
53 QT_DEPRECATED_VERSION_X_6_13("Use metadata(QtGrpc::MultiValue) for QMultiHash")
54 [[nodiscard]] Q_GRPC_EXPORT const QHash<QByteArray, QByteArray> &metadata() const & noexcept;
55 QT_DEPRECATED_VERSION_X_6_13("Use metadata(QtGrpc::MultiValue) for QMultiHash")
56 [[nodiscard]] Q_GRPC_EXPORT QHash<QByteArray, QByteArray> metadata() &&;
57 QT_DEPRECATED_VERSION_X_6_13("Use the QMultiHash overload")
58 Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(const QHash<QByteArray, QByteArray> &metadata);
59 QT_DEPRECATED_VERSION_X_6_13("Use the QMultiHash overload")
60 Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(QHash<QByteArray, QByteArray> &&metadata);
61#endif
62 [[nodiscard]] Q_GRPC_EXPORT const QMultiHash<QByteArray, QByteArray> &
63 metadata(QtGrpc::MultiValue_t) const & noexcept;
64 [[nodiscard]] Q_GRPC_EXPORT QMultiHash<QByteArray, QByteArray>
65 metadata(QtGrpc::MultiValue_t) &&;
66 Q_GRPC_EXPORT QGrpcChannelOptions &
67 setMetadata(const QMultiHash<QByteArray, QByteArray> &metadata);
68 Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
69 Q_GRPC_EXPORT QGrpcChannelOptions &
70 setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
71 Q_GRPC_EXPORT QGrpcChannelOptions &addMetadata(QByteArrayView key, QByteArrayView value);
72
73 [[nodiscard]] Q_GRPC_EXPORT std::optional<bool> filterServerMetadata() const noexcept;
74 Q_GRPC_EXPORT QGrpcChannelOptions &setFilterServerMetadata(bool value);
75
76 [[nodiscard]] Q_GRPC_EXPORT QGrpcSerializationFormat serializationFormat() const;
77 Q_GRPC_EXPORT QGrpcChannelOptions &
78 setSerializationFormat(const QGrpcSerializationFormat &format);
79
80#if QT_CONFIG(ssl)
81 [[nodiscard]] Q_GRPC_EXPORT std::optional<QSslConfiguration> sslConfiguration() const;
82 Q_GRPC_EXPORT QGrpcChannelOptions &
83 setSslConfiguration(const QSslConfiguration &sslConfiguration);
84#endif
85
86private:
87 QExplicitlySharedDataPointer<QGrpcChannelOptionsPrivate> d_ptr;
88
89#ifndef QT_NO_DEBUG_STREAM
90 friend Q_GRPC_EXPORT QDebug operator<<(QDebug debug, const QGrpcChannelOptions &chOpts);
91#endif
92
93 Q_DECLARE_PRIVATE(QGrpcChannelOptions)
94};
95
96Q_DECLARE_SHARED(QGrpcChannelOptions)
97
98QT_END_NAMESPACE
99
100#endif // QGRPCHANNELOPTIONS_H
101

source code of qtgrpc/src/grpc/qgrpcchanneloptions.h