diff options
-rw-r--r-- | include/cru/base/Exception.h | 15 | ||||
-rw-r--r-- | src/base/Exception.cpp | 15 |
2 files changed, 17 insertions, 13 deletions
diff --git a/include/cru/base/Exception.h b/include/cru/base/Exception.h index b299acc4..d102c263 100644 --- a/include/cru/base/Exception.h +++ b/include/cru/base/Exception.h @@ -10,27 +10,32 @@ namespace cru { #endif class CRU_BASE_API Exception : public std::exception { public: - explicit Exception(String message = {}, + explicit Exception(std::string message = "", + std::unique_ptr<std::exception> inner = nullptr); + explicit Exception(StringView message, std::unique_ptr<std::exception> inner = nullptr); ~Exception() override; public: - String GetMessage() const { return message_; } + [[deprecated("Use GetUtf8Message.")]] String GetMessage() const { + return String::FromUtf8(message_); + } + + std::string GetUtf8Message() const { return this->message_; } std::exception* GetInner() const noexcept { return inner_.get(); } const char* what() const noexcept override; protected: - void SetMessage(String message) { message_ = std::move(message); } + void SetMessage(StringView message) { message_ = message.ToUtf8(); } void AppendMessage(StringView additional_message); void AppendMessage(std::optional<StringView> additional_message); private: - String message_; - mutable std::string utf8_message_; + std::string message_; std::unique_ptr<std::exception> inner_; }; diff --git a/src/base/Exception.cpp b/src/base/Exception.cpp index 19938970..1e3813a9 100644 --- a/src/base/Exception.cpp +++ b/src/base/Exception.cpp @@ -5,22 +5,21 @@ #include <cerrno> namespace cru { -Exception::Exception(String message, std::unique_ptr<std::exception> inner) +Exception::Exception(std::string message, std::unique_ptr<std::exception> inner) : message_(std::move(message)), inner_(std::move(inner)) {} +Exception::Exception(StringView message, std::unique_ptr<std::exception> inner) + : message_(message.ToUtf8()), inner_(std::move(inner)) {} + Exception::~Exception() {} const char* Exception::what() const noexcept { - if (!message_.empty() && utf8_message_.empty()) { - utf8_message_ = message_.ToUtf8(); - } - - return utf8_message_.c_str(); + return message_.c_str(); } void Exception::AppendMessage(StringView additional_message) { - message_ += u" "; - message_ += additional_message; + message_ += " "; + message_ += additional_message.ToUtf8(); } void Exception::AppendMessage(std::optional<StringView> additional_message) { |