//////////////////////////////////////////////////////////////////////////////// // Copyright 2017 Google LLC. // // This software is licensed under the terms defined in the Widevine Master // License Agreement. For a copy of this agreement, please contact // widevine-licensing@google.com. //////////////////////////////////////////////////////////////////////////////// #include "common/status.h" #include #include "absl/base/macros.h" #include "absl/strings/str_cat.h" #include "util/error_space.h" namespace widevine { namespace { const char* kGenericErrorStatusMessage[] = {"OK", "unknown_error", "unknown_error", "invalid_argument", "unknown_error", "not_found", "already_exists", "permission_denied", "unknown_error", "unknown_error", "unknown_error", "unknown_error", "unimplemented", "internal", "unavailable"}; } // namespace class GenericErrorSpace : public util::ErrorSpaceImpl { public: static std::string space_name(); static std::string code_to_string(int code); }; std::string GenericErrorSpace::space_name() { return "generic"; } std::string GenericErrorSpace::code_to_string(int code) { static_assert( ABSL_ARRAYSIZE(kGenericErrorStatusMessage) == error::NUM_ERRORS, "mismatching generic error status message and generic error status."); if (code >= 0 && code < error::NUM_ERRORS) return kGenericErrorStatusMessage[code]; return std::to_string(code); } const util::ErrorSpace* Status::canonical_space() { return GenericErrorSpace::Get(); } std::string Status::ToString() const { if (status_code_ == error::OK) return "OK"; return absl::StrCat("Errors::", error_space_->String(status_code_), ": ", error_message_); } std::ostream& operator<<(std::ostream& os, const Status& x) { os << x.ToString(); return os; } } // namespace widevine