#pragma once #include #include typedef unsigned long DWORD; typedef _Return_type_success_(return >= 0) long HRESULT; enum class DalamudBootErrorDescription { None, ModulePathResolutionFail, ModuleResourceLoadFail, ModuleResourceVersionReadFail, ModuleResourceVersionSignatureFail, }; class DalamudBootError { DalamudBootErrorDescription m_dalamudErrorDescription; long m_hresult; public: DalamudBootError(DalamudBootErrorDescription dalamudErrorDescription, long hresult) noexcept; DalamudBootError(DalamudBootErrorDescription dalamudErrorDescription) noexcept; const char* describe() const; operator HRESULT() const { return m_hresult; } }; template using DalamudExpected = std::expected< std::conditional_t< std::is_reference_v, std::reference_wrapper>, T >, DalamudBootError >; using DalamudUnexpected = std::unexpected;