I remember using defineEnum a few times. From user perspective you have enum
names as
strings that forms a nasty mixin, not to mention you can't Ddoc single enum
values. It felt like
stone age. Then I took a look at how it's implemented and saw a bunch of
unreadable
templates glueing together the content of an unholy string mixin.
But instead of complaining I took time to devise something nicer:
enum Eh { Ah, Oh, Uh } // plain vanilla enum
mixin EnumUtils!Eh; // that's all you need, magic happens here
assert (enumToString(Eh.Ah) == "Ah");
assert (enumToString(cast(Eh)666) == null);
Eh eh;
assert (enumFromString("Oh", eh));
assert (eh == Eh.Oh);
assert (!enumFromString("Heh", eh));
Do you want the EnumUtils template in Phobos?
If so, how to contribute?
--
Tomek

I remember using defineEnum a few times. From user perspective you have enum
names as
strings that forms a nasty mixin, not to mention you can't Ddoc single enum
values. It felt like
stone age. Then I took a look at how it's implemented and saw a bunch of
unreadable
templates glueing together the content of an unholy string mixin.
But instead of complaining I took time to devise something nicer:
enum Eh { Ah, Oh, Uh } // plain vanilla enum
mixin EnumUtils!Eh; // that's all you need, magic happens here
assert (enumToString(Eh.Ah) == "Ah");
assert (enumToString(cast(Eh)666) == null);
Eh eh;
assert (enumFromString("Oh", eh));
assert (eh == Eh.Oh);
assert (!enumFromString("Heh", eh));
Do you want the EnumUtils template in Phobos?
If so, how to contribute?

That's a good contribution, but I just deprecated enumToString in a
recent commit because D's current introspection abilities made it easy
to define parse and to!string to manipulate enum names.
I'll be looking forward to other goodies!
Andrei

That's a good contribution, but I just deprecated enumToString in a
recent commit because D's current introspection abilities made it easy
to define parse and to!string to manipulate enum names.
I'll be looking forward to other goodies!