// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cast_receiver/common/public/status.h"
namespace cast_receiver {
std::string StatusCodeToString(StatusCode code) {
switch (code) {
case StatusCode::kOk:
return "OK";
case StatusCode::kCancelled:
return "CANCELLED";
case StatusCode::kUnknown:
return "UNKNOWN";
case StatusCode::kInvalidArgument:
return "INVALID_ARGUMENT";
case StatusCode::kDeadlineExceeded:
return "DEADLINE_EXCEEDED";
case StatusCode::kNotFound:
return "NOT_FOUND";
case StatusCode::kAlreadyExists:
return "ALREADY_EXISTS";
case StatusCode::kPermissionDenied:
return "PERMISSION_DENIED";
case StatusCode::kUnauthenticated:
return "UNAUTHENTICATED";
case StatusCode::kResourceExhausted:
return "RESOURCE_EXHAUSTED";
case StatusCode::kFailedPrecondition:
return "FAILED_PRECONDITION";
case StatusCode::kAborted:
return "ABORTED";
case StatusCode::kOutOfRange:
return "OUT_OF_RANGE";
case StatusCode::kUnimplemented:
return "UNIMPLEMENTED";
case StatusCode::kInternal:
return "INTERNAL";
case StatusCode::kUnavailable:
return "UNAVAILABLE";
case StatusCode::kDataLoss:
return "DATA_LOSS";
}
}
Status::Status(StatusCode code) : code_(code) {}
Status::Status(StatusCode code, std::string message)
: code_(code), message_(message) {}
Status::Status(const Status& x) : code_(x.code_), message_(x.message_) {}
Status::Status(Status&& x) {
code_ = x.code_;
message_ = x.message_;
}
Status& Status::operator=(const Status& x) {
code_ = x.code_;
message_ = x.message_;
return *this;
}
Status& Status::operator=(Status&& x) {
code_ = x.code_;
message_ = x.message_;
return *this;
}
void Status::Update(const Status& new_status) {
if (ok()) {
*this = new_status;
}
}
void Status::Update(Status&& new_status) {
if (ok()) {
*this = std::move(new_status);
}
}
std::ostream& operator<<(std::ostream& os, const Status& x) {
os << StatusCodeToString(x.code_) + ": " + x.message_;
return os;
}
bool operator==(const Status& lhs, const Status& rhs) {
return lhs.code_ == rhs.code_;
}
bool operator!=(const Status& lhs, const Status& rhs) {
return lhs.code_ != rhs.code_;
}
Status OkStatus() {
return Status(StatusCode::kOk);
}
} // namespace cast_receiver