aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/base/Exception.h15
-rw-r--r--src/base/Exception.cpp15
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) {