// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2019 Alexey Edelev // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QGRPCOPERATION_H #define QGRPCOPERATION_H #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QGrpcOperationContext; class QGrpcOperationPrivate; class Q_GRPC_EXPORT QGrpcOperation : public QObject { Q_OBJECT public: ~QGrpcOperation() override; template = true> std::optional read() const { std::optional r(std::in_place); if (!read(&*r)) r.reset(); return r; } bool read(QProtobufMessage *message) const; [[nodiscard]] const QHash &metadata() const & noexcept; void metadata() const && = delete; [[nodiscard]] QLatin1StringView method() const noexcept; [[nodiscard]] bool isFinished() const noexcept; Q_SIGNALS: void finished(const QGrpcStatus &status); public Q_SLOTS: void cancel(); protected: explicit QGrpcOperation(std::shared_ptr operationContext, QObject *parent = nullptr); [[nodiscard]] const QGrpcOperationContext &context() const & noexcept; [[nodiscard]] QGrpcOperationContext &context() & noexcept { return const_cast(std::as_const(*this).context()); } void context() && = delete; private: Q_DISABLE_COPY_MOVE(QGrpcOperation) Q_DECLARE_PRIVATE(QGrpcOperation) public: bool event(QEvent *event) override; }; QT_END_NAMESPACE #endif // QGRPCOPERATION_H