string enum_to_str(E)(E v) if (is(E == enum))
{
final switch (v) with(E)
{
static foreach (m; __traits(allMembers, E))
{
case mixin(m):
return m;
}
}
}