Implement formatting for enums

This commit is contained in:
2018-02-01 16:29:13 +01:00
parent 048ddf21ff
commit cbc68c2c43
2 changed files with 36 additions and 1 deletions

View File

@@ -737,10 +737,20 @@ private ref String printToString(string fmt, Args...)(return ref String result,
{
result.insertBack("null");
}
else static if(is(Unqual!Arg == bool)) // Boolean
else static if (is(Unqual!Arg == bool)) // Boolean
{
result.insertBack(args[0] ? "true" : "false");
}
else static if (is(Arg == enum)) // Enum
{
foreach (m; __traits(allMembers, Arg))
{
if (args[0] == __traits(getMember, Arg, m))
{
result.insertBack(m);
}
}
}
else static if (isSomeChar!Arg || isSomeString!Arg) // String or char
{
result.insertBack(args[0]);
@@ -810,6 +820,20 @@ package(tanya) String format(string fmt, Args...)(auto ref Args args)
return printToString!fmt(formatted, args);
}
// Enum.
@nogc nothrow pure @safe unittest
{
enum E1 : int
{
one,
two,
}
assert(format!"{}"(E1.one) == "one");
const E1 e1;
assert(format!"{}"(e1) == "one");
}
// One argument tests.
@nogc pure @safe unittest
{