summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2018-02-01 16:29:13 +0100
committerEugen Wissner <belka@caraus.de>2018-02-01 16:29:13 +0100
commitcbc68c2c436a6be322ff4ad480bdd99578dd2e3b (patch)
tree5ab27471733ab9195f4e9bbd70eb471e0a90da49
parent048ddf21ffd6f507282b06c99134b0d150ac5fe8 (diff)
downloadtanya-cbc68c2c436a6be322ff4ad480bdd99578dd2e3b.tar.gz
Implement formatting for enums
-rw-r--r--source/tanya/format.d26
-rw-r--r--source/tanya/meta/trait.d11
2 files changed, 36 insertions, 1 deletions
diff --git a/source/tanya/format.d b/source/tanya/format.d
index a42719f..cc59416 100644
--- a/source/tanya/format.d
+++ b/source/tanya/format.d
@@ -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
{
diff --git a/source/tanya/meta/trait.d b/source/tanya/meta/trait.d
index b0b5922..dc10a01 100644
--- a/source/tanya/meta/trait.d
+++ b/source/tanya/meta/trait.d
@@ -309,6 +309,17 @@ enum bool isClass(T) = is(T == class);
enum bool isStruct(T) = is(T == struct);
/**
+ * Tests whether $(D_PARAM T) is a enum.
+ *
+ * Params:
+ * T = A type.
+ *
+ * Returns: $(D_KEYWORD true) if $(D_PARAM T) is an enum,
+ * $(D_KEYWORD false) otherwise.
+ */
+enum bool isEnum(T) = is(T == enum);
+
+/**
* Determines whether $(D_PARAM T) is a polymorphic type, i.e. a
* $(D_KEYWORD class) or an $(D_KEYWORD interface).
*