describeType

Describe a type

  1. Type describeType()
  2. Type describeType()
    describeType
    ()
    ()
    if (
    !is(T == enum)
    )

Examples

It should describe an int

1 auto result = describeType!int;
2 
3 result.name.should.equal("int");
4 result.unqualName.should.equal("int");
5 result.fullyQualifiedName.should.equal("int");
6 
7 result.isBasicType.should.equal(true);
8 result.isBuiltinType.should.equal(true);
9 result.isConst.should.equal(false);
10 result.isInout.should.equal(false);
11 result.isImmutable.should.equal(false);
12 result.isShared.should.equal(false);

It should describe an int at compile time

enum result = describeType!int;

result.name.should.equal("int");
result.unqualName.should.equal("int");

It should describe a const int

1 auto result = describeType!(const(int));
2 
3 result.name.should.equal("const(int)");
4 result.unqualName.should.equal("int");
5 
6 result.isBasicType.should.equal(true);
7 result.isBuiltinType.should.equal(true);
8 result.isConst.should.equal(true);
9 result.isInout.should.equal(false);
10 result.isImmutable.should.equal(false);
11 result.isShared.should.equal(false);

It should describe an inout int

1 auto result = describeType!(inout(int));
2 
3 result.name.should.equal("inout(int)");
4 result.unqualName.should.equal("int");
5 
6 result.isBasicType.should.equal(true);
7 result.isBuiltinType.should.equal(true);
8 result.isConst.should.equal(false);
9 result.isInout.should.equal(true);
10 result.isImmutable.should.equal(false);
11 result.isShared.should.equal(false);

It should describe an immutable int

1 auto result = describeType!(immutable(int));
2 
3 result.name.should.equal("immutable(int)");
4 result.unqualName.should.equal("int");
5 
6 result.isBasicType.should.equal(true);
7 result.isBuiltinType.should.equal(true);
8 result.isConst.should.equal(false);
9 result.isInout.should.equal(false);
10 result.isImmutable.should.equal(true);
11 result.isShared.should.equal(false);

It should describe a shared int

1 auto result = describeType!(shared(int));
2 
3 result.name.should.equal("shared(int)");
4 result.unqualName.should.equal("int");
5 
6 result.isBasicType.should.equal(true);
7 result.isBuiltinType.should.equal(true);
8 result.isConst.should.equal(false);
9 result.isInout.should.equal(false);
10 result.isImmutable.should.equal(false);
11 result.isShared.should.equal(true);

It should describe a int pointer

1 auto result = describeType!(int*);
2 
3 result.name.should.equal("int*");
4 result.unqualName.should.equal("int*");
5 
6 result.isBasicType.should.equal(false);
7 result.isBuiltinType.should.equal(false);
8 result.isConst.should.equal(false);
9 result.isInout.should.equal(false);
10 result.isImmutable.should.equal(false);
11 result.isShared.should.equal(false);

It should describe a manifest constant

1 enum a = "value";
2 auto result = describeType!(a);
3 
4 result.name.should.equal("string");
5 result.unqualName.should.equal("string");
6 
7 result.isBasicType.should.equal(false);
8 result.isBuiltinType.should.equal(true);
9 result.isConst.should.equal(false);
10 result.isInout.should.equal(false);
11 result.isImmutable.should.equal(false);
12 result.isShared.should.equal(false);
13 result.isManifestConstant.should.equal(true);

It shuld describe an array of ints

1 auto result = describeType!(int[]);
2 
3 result.name.should.equal("int[]");
4 result.unqualName.should.equal("int[]");
5 
6 result.isArray.should.equal(true);
7 result.keyType.should.equal("size_t");
8 result.valueType.should.equal("int");

It shuld describe an array of strings

1 auto result = describeType!(string[]);
2 
3 result.name.should.equal("string[]");
4 result.unqualName.should.equal("string[]");
5 
6 result.isArray.should.equal(true);
7 result.keyType.should.equal("size_t");
8 result.valueType.should.equal("string");

It shuld describe an assoc array of ints

1 auto result = describeType!(int[string]);
2 
3 result.name.should.equal("int[string]");
4 result.unqualName.should.equal("int[string]");
5 
6 result.isArray.should.equal(false);
7 result.isAssociativeArray.should.equal(true);
8 result.keyType.should.equal("string");
9 result.valueType.should.equal("int");

It shuld describe an assoc array of strings

1 auto result = describeType!(string[string]);
2 
3 result.name.should.equal("string[string]");
4 result.unqualName.should.equal("string[string]");
5 
6 result.isArray.should.equal(false);
7 result.isAssociativeArray.should.equal(true);
8 result.keyType.should.equal("string");
9 result.valueType.should.equal("string");

It shuld describe a nested array

1 auto result = describeType!(int[ulong][][ulong]);
2 
3 result.name.should.equal("int[ulong][][ulong]");
4 result.unqualName.should.equal("int[ulong][][ulong]");
5 
6 result.isArray.should.equal(false);
7 result.isAssociativeArray.should.equal(true);
8 result.keyType.should.equal("ulong");
9 result.valueType.should.equal("int[ulong][]");

It should describe a struct

1 struct Test {}
2 
3 auto result = describeType!Test;
4 
5 result.name.should.equal("Test");
6 result.unqualName.should.equal("Test");
7 result.fullyQualifiedName.should.equal("introspection.type.__unittest_L344_C1.Test");
8 
9 result.isStruct.should.equal(true);
10 result.isBasicType.should.equal(false);
11 result.isBuiltinType.should.equal(false);
12 result.isConst.should.equal(false);
13 result.isInout.should.equal(false);
14 result.isImmutable.should.equal(false);
15 result.isShared.should.equal(false);

It should describe a class

1 class Test {}
2 
3 auto result = describeType!Test;
4 
5 result.name.should.equal("Test");
6 result.unqualName.should.equal("Test");
7 
8 result.isStruct.should.equal(false);
9 result.isClass.should.equal(true);
10 result.isBasicType.should.equal(false);
11 result.isBuiltinType.should.equal(false);
12 result.isConst.should.equal(false);
13 result.isInout.should.equal(false);
14 result.isImmutable.should.equal(false);
15 result.isShared.should.equal(false);

It should describe an union

1 union Test {}
2 
3 auto result = describeType!Test;
4 
5 result.name.should.equal("Test");
6 result.unqualName.should.equal("Test");
7 
8 result.isStruct.should.equal(false);
9 result.isClass.should.equal(false);
10 result.isUnion.should.equal(true);
11 result.isBasicType.should.equal(false);
12 result.isBuiltinType.should.equal(false);
13 result.isConst.should.equal(false);
14 result.isInout.should.equal(false);
15 result.isImmutable.should.equal(false);
16 result.isShared.should.equal(false);

It should describe an interface

1 interface Test {}
2 
3 auto result = describeType!Test;
4 
5 result.name.should.equal("Test");
6 result.unqualName.should.equal("Test");
7 
8 result.isStruct.should.equal(false);
9 result.isClass.should.equal(false);
10 result.isUnion.should.equal(false);
11 result.isInterface.should.equal(true);
12 result.isBasicType.should.equal(false);
13 result.isBuiltinType.should.equal(false);
14 result.isConst.should.equal(false);
15 result.isInout.should.equal(false);
16 result.isImmutable.should.equal(false);
17 result.isShared.should.equal(false);

It should describe an enum

1 enum Test {
2   a,b,c
3 }
4 
5 auto result = describeType!Test;
6 
7 result.name.should.equal("Test");
8 result.unqualName.should.equal("Test");
9 result.module_.should.equal("introspection.type");
10 
11 result.isStruct.should.equal(false);
12 result.isClass.should.equal(false);
13 result.isUnion.should.equal(false);
14 result.isInterface.should.equal(false);
15 result.isEnum.should.equal(true);
16 result.isBasicType.should.equal(false);
17 result.isBuiltinType.should.equal(false);
18 result.isConst.should.equal(false);
19 result.isInout.should.equal(false);
20 result.isImmutable.should.equal(false);
21 result.isShared.should.equal(false);

Meta