/** DGui project file. Copyright: Trogu Antonio Davide 2011-2013 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0). Authors: Trogu Antonio Davide */ module dguihub.core.exception; import std..string : format; import std.windows.syserror; import dguihub.core.winapi : GetLastError; mixin template exceptionBody() { public this(string msg) { super(msg); } } final class DGuiException : Exception { mixin exceptionBody; } final class Win32Exception : Exception { mixin exceptionBody; } final class RegistryException : Exception { mixin exceptionBody; } final class GDIException : Exception { mixin exceptionBody; } final class WindowsNotSupportedException : Exception { mixin exceptionBody; } void throwException(T1, T2...)(string fmt, T2 args) { static if (is(T1 : Win32Exception)) { throw new T1(format(fmt ~ "\nWindows Message: '%s'", args, sysErrorString(GetLastError()))); } else { throw new T1(format(fmt, args)); } }