1// Copyright (C) 2022 The Qt Company Ltd.
2// Copyright (C) 2019 Alexey Edelev <semlanik@gmail.com>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QGRPCOPERATION_H
6#define QGRPCOPERATION_H
7
8#include <QtGrpc/qgrpcstatus.h>
9#include <QtGrpc/qtgrpcglobal.h>
10
11#include <QtProtobuf/qtprotobuftypes.h>
12
13#include <QtCore/qhash.h>
14#include <QtCore/qobject.h>
15#include <QtCore/qstringfwd.h>
16#include <QtCore/qtdeprecationdefinitions.h>
17
18#include <optional>
19
20QT_BEGIN_NAMESPACE
21
22class QGrpcOperationContext;
23class QGrpcOperationPrivate;
24
25class Q_GRPC_EXPORT QGrpcOperation : public QObject
26{
27 Q_OBJECT
28public:
29 ~QGrpcOperation() override;
30
31 template <typename T, QtProtobuf::if_protobuf_message<T> = true>
32 std::optional<T> read() const
33 {
34 std::optional<T> r(std::in_place);
35 if (!read(&*r))
36 r.reset();
37 return r;
38 }
39 bool read(QProtobufMessage *message) const;
40
41#if QT_DEPRECATED_SINCE(6, 13)
42 QT_DEPRECATED_VERSION_X_6_13("Use serverInitialMetadata()")
43 [[nodiscard]] const QHash<QByteArray, QByteArray> &metadata() const & noexcept;
44 void metadata() const && = delete;
45#endif
46
47 [[nodiscard]] const QMultiHash<QByteArray, QByteArray> &
48 serverInitialMetadata() const & noexcept;
49 [[nodiscard]] const QMultiHash<QByteArray, QByteArray> &
50 serverTrailingMetadata() const & noexcept;
51
52 [[nodiscard]] QLatin1StringView method() const noexcept;
53
54 [[nodiscard]] bool isFinished() const noexcept;
55
56 [[nodiscard]] QMetaType responseMetaType() const;
57
58Q_SIGNALS:
59 void finished(const QGrpcStatus &status);
60
61public Q_SLOTS:
62 void cancel();
63
64protected:
65 explicit QGrpcOperation(std::shared_ptr<QGrpcOperationContext> operationContext,
66 QObject *parent = nullptr);
67
68 [[nodiscard]] const QGrpcOperationContext &context() const & noexcept;
69 [[nodiscard]] QGrpcOperationContext &context() & noexcept
70 {
71 return const_cast<QGrpcOperationContext &>(std::as_const(t&: *this).context());
72 }
73 void context() const && = delete;
74
75private:
76 Q_DISABLE_COPY_MOVE(QGrpcOperation)
77 Q_DECLARE_PRIVATE(QGrpcOperation)
78
79public:
80 bool event(QEvent *event) override;
81};
82
83QT_END_NAMESPACE
84
85#endif // QGRPCOPERATION_H
86

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