#ifndef COMPONENTS_CAST_RECEIVER_COMMON_PUBLIC_STATUS_H_
#define COMPONENTS_CAST_RECEIVER_COMMON_PUBLIC_STATUS_H_
#include <ostream>
#include <string>
#include <string_view>
namespace cast_receiver {
enum class StatusCode : int {
kOk = 0,
kCancelled = 1,
kUnknown = 2,
kInvalidArgument = 3,
kDeadlineExceeded = 4,
kNotFound = 5,
kAlreadyExists = 6,
kPermissionDenied = 7,
kResourceExhausted = 8,
kFailedPrecondition = 9,
kAborted = 10,
kOutOfRange = 11,
kUnimplemented = 12,
kInternal = 13,
kUnavailable = 14,
kDataLoss = 15,
kUnauthenticated = 16,
};
class Status final {
public:
Status();
explicit Status(StatusCode code);
Status(StatusCode code, std::string message);
Status(const Status&);
Status(Status&& x);
Status& operator=(const Status& x);
Status& operator=(Status&& x);
~Status() = default;
void Update(const Status& new_status);
void Update(Status&& new_status);
StatusCode code() const;
std::string_view message() const;
[[nodiscard]] bool ok() const;
[[nodiscard]] explicit operator bool() const { return ok(); }
friend std::ostream& operator<<(std::ostream& os, const Status& x);
friend bool operator==(const Status& lhs, const Status& rhs);
private:
StatusCode code_;
std::string message_;
};
inline Status::Status() : code_(StatusCode::kOk) {}
inline StatusCode Status::code() const {
return code_;
}
inline std::string_view Status::message() const {
return message_;
}
inline bool Status::ok() const {
return code_ == StatusCode::kOk;
}
Status OkStatus();
}
#endif