// Copyright 2021 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include #include namespace Shader { class Exception : public std::exception { public: explicit Exception(std::string message_) noexcept : message{std::move(message_)} {} const char* what() const override { return message.c_str(); } void Prepend(std::string_view prepend) { message.insert(0, prepend); } void Append(std::string_view append) { message += append; } private: std::string message; }; class LogicError : public Exception { public: template LogicError(const char* message, Args&&... args) : Exception{fmt::format(message, std::forward(args)...)} {} }; class RuntimeError : public Exception { public: template RuntimeError(const char* message, Args&&... args) : Exception{fmt::format(message, std::forward(args)...)} {} }; class NotImplementedException : public Exception { public: template NotImplementedException(const char* message, Args&&... args) : Exception{fmt::format(message, std::forward(args)...)} { Append(" is not implemented"); } }; class InvalidArgument : public Exception { public: template InvalidArgument(const char* message, Args&&... args) : Exception{fmt::format(message, std::forward(args)...)} {} }; } // namespace Shader