| // 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. |
| |
| #ifndef BUFFET_ERROR_H_ |
| #define BUFFET_ERROR_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include <base/basictypes.h> |
| |
| namespace chromeos { |
| |
| class Error; // Forward declaration. |
| |
| typedef std::unique_ptr<Error> ErrorPtr; |
| |
| class Error { |
| public: |
| virtual ~Error() = default; |
| |
| // Creates an instance of Error class. |
| static ErrorPtr Create(const std::string& domain, const std::string& code, |
| const std::string& message); |
| static ErrorPtr Create(const std::string& domain, const std::string& code, |
| const std::string& message, ErrorPtr inner_error); |
| // If |error| is not nullptr, creates another instance of Error class, |
| // initializes it with specified arguments and adds it to the head of |
| // the error chain pointed to by |error|. |
| static void AddTo(ErrorPtr* error, const std::string& domain, |
| const std::string& code, const std::string& message); |
| |
| // Returns the error domain, code and message |
| const std::string& GetDomain() const { return domain_; } |
| const std::string& GetCode() const { return code_; } |
| const std::string& GetMessage() const { return message_; } |
| |
| // Checks if this or any of the inner error in the chain has the specified |
| // error domain. |
| bool HasDomain(const std::string& domain) const; |
| // Checks if this or any of the inner error in the chain matches the specified |
| // error domain and code. |
| bool HasError(const std::string& domain, const std::string& code) const; |
| |
| // Gets a pointer to the inner error, if present. Returns nullptr otherwise. |
| const Error* GetInnerError() const { return inner_error_.get(); } |
| |
| protected: |
| // Constructor is protected since this object is supposed to be |
| // created via the Create factory methods. |
| Error(const std::string& domain, const std::string& code, |
| const std::string& message, ErrorPtr inner_error); |
| |
| // Error domain. The domain defines the scopes for error codes. |
| // Two errors with the same code but different domains are different errors. |
| std::string domain_; |
| // Error code. A unique error code identifier within the given domain. |
| std::string code_; |
| // Human-readable error message. |
| std::string message_; |
| // Pointer to inner error, if any. This forms a chain of errors. |
| ErrorPtr inner_error_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(Error); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // BUFFET_ERROR_H_ |