| // Copyright 2014 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "buffet/error.h" |
| |
| #include <base/logging.h> |
| |
| using chromeos::Error; |
| using chromeos::ErrorPtr; |
| |
| ErrorPtr Error::Create(const std::string& domain, |
| const std::string& code, |
| const std::string& message) { |
| return Create(domain, code, message, ErrorPtr()); |
| } |
| |
| ErrorPtr Error::Create(const std::string& domain, |
| const std::string& code, |
| const std::string& message, |
| ErrorPtr inner_error) { |
| LOG(ERROR) << "Error::Create: Domain=" << domain |
| << ", Code=" << code << ", Message=" << message; |
| return ErrorPtr(new Error(domain, code, message, std::move(inner_error))); |
| } |
| |
| void Error::AddTo(ErrorPtr* error, const std::string& domain, |
| const std::string& code, const std::string& message) { |
| if (error) { |
| *error = Create(domain, code, message, std::move(*error)); |
| } else { |
| // Create already logs the error, but if |error| is nullptr, |
| // we still want to log the error... |
| LOG(ERROR) << "Error::Create: Domain=" << domain |
| << ", Code=" << code << ", Message=" << message; |
| } |
| } |
| |
| bool Error::HasDomain(const std::string& domain) const { |
| const Error* err = this; |
| while (err) { |
| if (err->GetDomain() == domain) |
| return true; |
| err = err->GetInnerError(); |
| } |
| return false; |
| } |
| |
| bool Error::HasError(const std::string& domain, const std::string& code) const { |
| const Error* err = this; |
| while (err) { |
| if (err->GetDomain() == domain && err->GetCode() == code) |
| return true; |
| err = err->GetInnerError(); |
| } |
| return false; |
| } |
| |
| Error::Error(const std::string& domain, const std::string& code, |
| const std::string& message, ErrorPtr inner_error) : |
| domain_(domain), code_(code), message_(message), |
| inner_error_(std::move(inner_error)) { |
| } |