Add support for enum types
This commit is contained in:
parent
547705ae11
commit
6dca60d5ea
3 changed files with 74 additions and 2 deletions
|
@ -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))");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue