actionMappingFormat
enum actionMappingFormat =
q{
static if (!(hasUDA!(%1$s.%2$s, HttpIgnore)))
{
enum parameterTypes_%2$s = Parameters!(controller.%2$s).stringof[1..$-1].split(", ");
static if (parameterTypes_%2$s.length)
{
template isJsonObject(T)
{
static if (is(T == struct) || is(T == class))
{
enum isJsonObject = true;
}
else
{
enum isJsonObject = false;
}
}
mixin("static const isJson = isJsonObject!" ~ parameterTypes_%2$s[0] ~ ";");
static const isQuery = hasUDA!(%1$s.%2$s, HttpQuery);
static const isForm = hasUDA!(%1$s.%2$s, HttpForm);
static const isPath = hasUDA!(%1$s.%2$s, HttpPath);
static if (isJson)
{
static if(parameterTypes_%2$s.length == 1)
{
mapRoutedAction(memberHttpMethod, memberActionName,
new ControllerAction({
mixin("auto jsonResult = deserializeJson!("~ parameterTypes_%2$s[0] ~")(request.textBody);");
return controller.%2$s(jsonResult);
}));
}
else
{
static assert(0, "Can only map a single json object.");
}
}
else static if (isQuery || isForm || isPath)
{
enum parameterNames_%2$s = [ParameterIdentifierTuple!(controller.%2$s)];
mapRoutedAction(memberHttpMethod, memberActionName,
new ControllerAction({
static foreach (i; 0 .. parameterNames_%2$s.length)
{
static if (isQuery)
{
mixin("auto " ~ parameterNames_%2$s[i] ~ " = to!(" ~ (parameterTypes_%2$s[i]) ~ ")(request.getQuery(\"" ~ parameterNames_%2$s[i] ~ "\"));");
}
else static if (isForm)
{
mixin("auto " ~ parameterNames_%2$s[i] ~ " = to!(" ~ (parameterTypes_%2$s[i]) ~ ")(request.getForm(\"" ~ parameterNames_%2$s[i] ~ "\"));");
}
else static if (isPath)
{
mixin("auto " ~ parameterNames_%2$s[i] ~ " = to!(" ~ (parameterTypes_%2$s[i]) ~ ")(request.path[" ~ to!string(i + 2) ~ "]);");
}
}
mixin("return controller.%2$s(" ~ (parameterNames_%2$s.join(",")) ~ ");");
}));
}
else
{
static assert(0, "Unable to determine a mapping path for the action.");
}
}
else
{
mapRoutedAction(memberHttpMethod, memberActionName,
new ControllerAction(&controller.%2$s));
}
}
};