diff options
Diffstat (limited to 'CruUI/exception.h')
-rw-r--r-- | CruUI/exception.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/CruUI/exception.h b/CruUI/exception.h new file mode 100644 index 00000000..c7d6f996 --- /dev/null +++ b/CruUI/exception.h @@ -0,0 +1,42 @@ +#pragma once + +#include "system_headers.h" +#include <optional> + +#include "base.h" + + +namespace cru { + class HResultError : public std::runtime_error + { + public: + explicit HResultError(HRESULT h_result); + HResultError(HRESULT h_result, const std::string& message); + HResultError(const HResultError& other) = default; + HResultError(HResultError&& other) = default; + HResultError& operator=(const HResultError& other) = default; + HResultError& operator=(HResultError&& other) = default; + ~HResultError() override = default; + + HRESULT GetHResult() const + { + return h_result_; + } + + private: + static std::string MakeMessage(HRESULT h_result, std::optional<std::string> message); + + private: + HRESULT h_result_; + }; + + inline void ThrowIfFailed(const HRESULT h_result) { + if (FAILED(h_result)) + throw HResultError(h_result); + } + + inline void ThrowIfFailed(const HRESULT h_result, const std::string& message) { + if (FAILED(h_result)) + throw HResultError(h_result, message); + } +} |