Add support for enum types

This commit is contained in:
Harry T. Vennik 2017-07-17 20:04:51 +02:00
parent 547705ae11
commit 6dca60d5ea
3 changed files with 74 additions and 2 deletions

View file

@ -47,6 +47,8 @@ template basicDBus(T) {
|| is (T == double) || is (T == string) || is(T == bool)
|| is (T == ObjectPath)) {
enum basicDBus = true;
} else static if(is(T B == enum)) {
enum basicDBus = basicDBus!B;
} else {
enum basicDBus = false;
}
@ -71,6 +73,7 @@ template canDBus(T) {
enum canDBus = false;
}
}
unittest {
import dunit.toolkit;
(canDBus!int).assertTrue();
@ -106,6 +109,8 @@ string typeSig(T)() if(canDBus!T) {
return "o";
} else static if(isVariant!T) {
return "v";
} else static if(is(T B == enum)) {
return typeSig!B;
} else static if(is(T == DBusAny)) {
static assert(false, "Cannot determine type signature of DBusAny. Change to Variant!DBusAny if a variant was desired.");
} else static if(isTuple!T) {
@ -169,6 +174,11 @@ unittest {
typeSig!bool().assertEqual("b");
typeSig!string().assertEqual("s");
typeSig!(Variant!int)().assertEqual("v");
// enums
enum E : byte { a, b, c }
typeSig!E().assertEqual(typeSig!byte());
enum U : string { One = "One", Two = "Two" }
typeSig!U().assertEqual(typeSig!string());
// structs
typeSig!(Tuple!(int,string,string)).assertEqual("(iss)");
typeSig!(Tuple!(int,string,Variant!int,Tuple!(int,"k",double,"x"))).assertEqual("(isv(id))");