June 23, 2017
https://issues.dlang.org/show_bug.cgi?id=17542

          Issue ID: 17542
           Summary: DSON conversion of enums misses enum name
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: phobos
          Assignee: nobody@puremagic.com
          Reporter: dlang-bugzilla@thecybershadow.net

This almost works:

///////////// test.d ////////////
import std.conv : text;
enum E { a }
struct S { E e; }
immutable S s1 = S.init;
immutable S s2 = mixin(text(s1));
/////////////////////////////////

It doesn't work because for the enum member a, std.format emits just "a" instead of "E.a".

std.format is already capable of converting the same type to string in
different ways, e.g. format("%s", "hello") and format("%(%s%)", ["hello"]) will
have the string converted differently (in the second case, with quotes and
escapes).

So, it would be nice that for similar circumstances, stringified enums had their name included in the same way that stringified structs have their name included.

Incidentally, I found an interesting use case for DSON: parsing or generating a complicated data structure, dumping it to a .d file, then loading the .d file by using a mixin+import expression, for cases when generating said data directly at compile time would be too slow or otherwise impractical.

--