1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QGRPCOPERATIONCONTEXT_H
5#define QGRPCOPERATIONCONTEXT_H
6
7#include <QtGrpc/qtgrpcglobal.h>
8
9#include <QtProtobuf/qabstractprotobufserializer.h>
10
11#include <QtCore/qhash.h>
12#include <QtCore/qobject.h>
13#include <QtCore/qstringfwd.h>
14#include <QtCore/qtdeprecationdefinitions.h>
15
16#include <memory>
17
18QT_BEGIN_NAMESPACE
19
20class QGrpcCallOptions;
21class QGrpcOperationContextPrivate;
22class QGrpcStatus;
23
24class Q_GRPC_EXPORT QGrpcOperationContext final : public QObject
25{
26 Q_OBJECT
27 QT_DEFINE_TAG_STRUCT(PrivateConstructor);
28
29public:
30 explicit QGrpcOperationContext(QLatin1StringView method, QLatin1StringView service,
31 QByteArrayView argument, const QGrpcCallOptions &options,
32 std::shared_ptr<QAbstractProtobufSerializer> serializer,
33 PrivateConstructor);
34 ~QGrpcOperationContext() override;
35
36 [[nodiscard]] QLatin1StringView method() const noexcept;
37 [[nodiscard]] QLatin1StringView service() const noexcept;
38 [[nodiscard]] QByteArrayView argument() const noexcept;
39
40 void callOptions() const && = delete;
41 [[nodiscard]] const QGrpcCallOptions &callOptions() const & noexcept;
42
43#if QT_DEPRECATED_SINCE(6, 13)
44 void serverMetadata() const && = delete;
45 QT_DEPRECATED_VERSION_X_6_13("Use serverInitialMetadata()")
46 [[nodiscard]] const QHash<QByteArray, QByteArray> &serverMetadata() const & noexcept;
47 QT_DEPRECATED_VERSION_X_6_13("Use setServerInitialMetadata(QMultiHash&&)")
48 void setServerMetadata(const QHash<QByteArray, QByteArray> &metadata);
49 QT_DEPRECATED_VERSION_X_6_13("Use setServerInitialMetadata(QMultiHash&&)")
50 void setServerMetadata(QHash<QByteArray, QByteArray> &&metadata);
51#endif // QT_DEPRECATED_SINCE(6, 13)
52
53 void serverInitialMetadata() const && = delete;
54 [[nodiscard]] const QMultiHash<QByteArray, QByteArray> &
55 serverInitialMetadata() const & noexcept;
56 void setServerInitialMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
57
58 void serverTrailingMetadata() const && = delete;
59 [[nodiscard]] const QMultiHash<QByteArray, QByteArray> &
60 serverTrailingMetadata() const & noexcept;
61 void setServerTrailingMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
62
63 [[nodiscard]] QMetaType responseMetaType() const;
64 void setResponseMetaType(QMetaType metaType);
65
66 [[nodiscard]] std::shared_ptr<const QAbstractProtobufSerializer> serializer() const;
67
68Q_SIGNALS:
69 // Outgoing signals of the channel.
70 void finished(const QGrpcStatus &status);
71 void messageReceived(const QByteArray &data);
72 // Icoming signals from the client.
73 void cancelRequested();
74 void writeMessageRequested(const QByteArray &data);
75 void writesDoneRequested();
76
77private:
78 Q_DISABLE_COPY_MOVE(QGrpcOperationContext)
79 Q_DECLARE_PRIVATE(QGrpcOperationContext)
80
81 friend class QAbstractGrpcChannel;
82
83public:
84 bool event(QEvent *event) override;
85};
86
87QT_END_NAMESPACE
88
89#endif // QGRPCOPERATIONCONTEXT_H
90

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