/** Some additional conversion functions. Copyright: © 2019 Arne Ludwig <arne.ludwig@posteo.de> License: Subject to the terms of the MIT license, as written in the included LICENSE file. Authors: Arne Ludwig <arne.ludwig@posteo.de> */ module dalicious.conv; /** Return the name of a given enum value. This uses `final switch` to cause an assertion failure if `enumValue` is not part of `E` instead of throwing an exception. Returns: Name of enumValue. */ string safeEnumName(E)(E enumValue) nothrow if (is(E == enum)) { import std.traits : EnumMembers; final switch (enumValue) { static foreach (i, alias caseValue; EnumMembers!E) { case caseValue: return __traits(identifier, EnumMembers!E[i]); } } } /// unittest { enum Colors { red, green, blue, } assert(Colors.red.safeEnumName == "red"); assert(Colors.green.safeEnumName == "green"); assert(Colors.blue.safeEnumName == "blue"); }