describeType

Describe a type

  1. Type describeType()
    describeType
    (
    T
    )
    ()
  2. Type describeType()

Examples

It should describe an int

auto result = describeType!int;

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

result.isBasicType.should.equal(true);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
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

auto result = describeType!(const(int));

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

result.isBasicType.should.equal(true);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(true);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe an inout int

auto result = describeType!(inout(int));

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

result.isBasicType.should.equal(true);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(false);
result.isInout.should.equal(true);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe an immutable int

auto result = describeType!(immutable(int));

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

result.isBasicType.should.equal(true);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(true);
result.isShared.should.equal(false);

It should describe a shared int

auto result = describeType!(shared(int));

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

result.isBasicType.should.equal(true);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(true);

It should describe a int pointer

auto result = describeType!(int*);

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

result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe a manifest constant

enum a = "value";
auto result = describeType!(a);

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

result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(true);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);
result.isManifestConstant.should.equal(true);

It shuld describe an array of ints

auto result = describeType!(int[]);

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

result.isArray.should.equal(true);
result.keyType.should.equal("size_t");
result.valueType.should.equal("int");

It shuld describe an array of strings

auto result = describeType!(string[]);

result.name.should.equal("string[]");
result.unqualName.should.equal("string[]");

result.isArray.should.equal(true);
result.keyType.should.equal("size_t");
result.valueType.should.equal("string");

It shuld describe an assoc array of ints

auto result = describeType!(int[string]);

result.name.should.equal("int[string]");
result.unqualName.should.equal("int[string]");

result.isArray.should.equal(false);
result.isAssociativeArray.should.equal(true);
result.keyType.should.equal("string");
result.valueType.should.equal("int");

It shuld describe an assoc array of strings

auto result = describeType!(string[string]);

result.name.should.equal("string[string]");
result.unqualName.should.equal("string[string]");

result.isArray.should.equal(false);
result.isAssociativeArray.should.equal(true);
result.keyType.should.equal("string");
result.valueType.should.equal("string");

It shuld describe a nested array

auto result = describeType!(int[ulong][][ulong]);

result.name.should.equal("int[ulong][][ulong]");
result.unqualName.should.equal("int[ulong][][ulong]");

result.isArray.should.equal(false);
result.isAssociativeArray.should.equal(true);
result.keyType.should.equal("ulong");
result.valueType.should.equal("int[ulong][]");

It should describe a struct

struct Test {}

auto result = describeType!Test;

result.name.should.equal("Test");
result.unqualName.should.equal("Test");
result.fullyQualifiedName.should.equal("introspection.type.__unittest_L344_C1.Test");

result.isStruct.should.equal(true);
result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe a class

class Test {}

auto result = describeType!Test;

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

result.isStruct.should.equal(false);
result.isClass.should.equal(true);
result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe an union

union Test {}

auto result = describeType!Test;

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

result.isStruct.should.equal(false);
result.isClass.should.equal(false);
result.isUnion.should.equal(true);
result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe an interface

interface Test {}

auto result = describeType!Test;

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

result.isStruct.should.equal(false);
result.isClass.should.equal(false);
result.isUnion.should.equal(false);
result.isInterface.should.equal(true);
result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

It should describe an enum

enum Test {
  a,b,c
}

auto result = describeType!Test;

result.name.should.equal("Test");
result.unqualName.should.equal("Test");
result.module_.should.equal("introspection.type");

result.isStruct.should.equal(false);
result.isClass.should.equal(false);
result.isUnion.should.equal(false);
result.isInterface.should.equal(false);
result.isEnum.should.equal(true);
result.isBasicType.should.equal(false);
result.isBuiltinType.should.equal(false);
result.isConst.should.equal(false);
result.isInout.should.equal(false);
result.isImmutable.should.equal(false);
result.isShared.should.equal(false);

Meta