// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2019 Alexey Edelev // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QGRPCSTATUS_H #define QGRPCSTATUS_H #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QDataStream; class QDebug; class QVariant; class QGrpcStatus final { Q_GADGET_EXPORT(Q_GRPC_EXPORT) Q_PROPERTY(QtGrpc::StatusCode code READ code CONSTANT) Q_PROPERTY(QString message READ message CONSTANT) public: Q_GRPC_EXPORT Q_IMPLICIT QGrpcStatus(QtGrpc::StatusCode code = {}, QAnyStringView message = {}); Q_GRPC_EXPORT ~QGrpcStatus(); Q_GRPC_EXPORT QGrpcStatus(const QGrpcStatus &other); Q_GRPC_EXPORT QGrpcStatus &operator=(const QGrpcStatus &other); QGrpcStatus(QGrpcStatus &&other) noexcept = default; QGrpcStatus &operator=(QGrpcStatus &&other) noexcept = default; Q_GRPC_EXPORT Q_IMPLICIT operator QVariant() const; void swap(QGrpcStatus &other) noexcept { std::swap(m_code, other.m_code); m_message.swap(other.m_message); } [[nodiscard]] QtGrpc::StatusCode code() const noexcept { return m_code; } [[nodiscard]] bool isOk() const noexcept { return code() == QtGrpc::StatusCode::Ok; } [[nodiscard]] const QString &message() const & noexcept { return m_message; } [[nodiscard]] QString message() && noexcept { return std::move(m_message); } private: QtGrpc::StatusCode m_code; QString m_message; friend bool comparesEqual(const QGrpcStatus &lhs, QtGrpc::StatusCode rhs) noexcept { return lhs.code() == rhs; } friend bool comparesEqual(const QGrpcStatus &lhs, const QGrpcStatus &rhs) noexcept { return lhs.code() == rhs.code(); } Q_DECLARE_EQUALITY_COMPARABLE(QGrpcStatus, QtGrpc::StatusCode) Q_DECLARE_EQUALITY_COMPARABLE(QGrpcStatus) friend size_t qHash(const QGrpcStatus &key, size_t seed = 0) noexcept { return qHash(key.code(), seed); } #ifndef QT_NO_DEBUG_STREAM friend Q_GRPC_EXPORT QDebug operator<<(QDebug debug, const QGrpcStatus &status); #endif #ifndef QT_NO_DATASTREAM friend Q_GRPC_EXPORT QDataStream &operator<<(QDataStream &out, const QGrpcStatus &status); friend Q_GRPC_EXPORT QDataStream &operator>>(QDataStream &in, QGrpcStatus &status); #endif }; Q_DECLARE_SHARED(QGrpcStatus) QT_END_NAMESPACE #endif // QGRPCSTATUS_H