In the example below, one of the attributes is @dbForeignKey!Position. pragma (msg, attr) gives me: dbForeignKey!(Position). I want to be able to extract the Postion as a type so I can call another template like: save!Position ();
Is this possible?
import std.stdio;
import std.traits;
import std.format;
struct dbForeignKey(T)
{
}
struct Employee
{
long id;
string first_name;
string last_name;
@dbForeignKey!Position long default_position_id;
}
struct Position
{
long id;
string name;
}
void main()
{
Employee e;
structForm!Employee (e);
}
void structForm (T)(T data)
{
string form = fullyQualifiedName!T;
writeln ("form name = %s".format(form));
string field_label;
bool required;
foreach(field_name; FieldNameTuple!T)
{
writeln ("field name = %s".format(field_name));
auto field_value = __traits(getMember, data, field_name);
writeln ("field value = %s".format(field_value));
foreach (attr; __traits(getAttributes, __traits(getMember, data, field_name)))
{
pragma (msg, attr);
writeln ("attr = %s".format (attr.stringof));
}
writeln ("-----------------------------------");
}
}
The compiler prints this for the pragma is:
dbForeignKey!(Position)
the program's output is:
form name = test.Employee
field name = id
field value = 0
-----------------------------------
field name = first_name
field value =
-----------------------------------
field name = last_name
field value =
-----------------------------------
field name = default_position_id
field value = 0
attr = dbForeignKey!(Position)
-----------------------------------