Hello,

First of all congratulations for building such a nice framework. I love
D but now I love it even more. Am seriously thinking about using this
for our core web services.

During testing I had found some issues. Was trying to setup json
(de)serialization (with rest). After pasting the error string at google
I stumbled upon this:

https://github.com/rejectedsoftware/vibe.d/issues/404

Eventhough I got the error at line 233 of serialization.d, and Geod24,
who filed issue 404, got it on line 107, the fact that the code at both
lines is some similar made me conclude that the issue is related.

107: enum fname = getAttribute!(member,
NameAttribute)(NameAttribute(underscoreStrip(mname))).name;

233: enum fname =
getAttribute!(member)(NameAttribute(underscoreStrip(mname))).name;

I made a small file to reproduce the error, here it is:

import vibe.data.serialization;
import vibe.internal.meta.uda;
import std.typetuple;

struct Query
{

@name("this") int team;
@name("should") int limit;
@name("show") int skip;
@name("up") string search;

}

private static T getAttribute(alias decl, T)(T default_value)
{

enum val = findFirstUDA!(T, decl);
static if (val.found) return val.value;
else return default_value;

}

private string underscoreStrip(string field_name)
{

if( field_name.length < 1 || field_name[$-1] != '_' ) return field_name;
else return field_name[0 .. $-1];

}

private void test(T)()
{

foreach (i, mname; __traits(allMembers, T))
{
	alias member = TypeTuple!(__traits(getMember, T, mname))[0];
	enum fname = 

getAttribute!(member)(NameAttribute(underscoreStrip(mname))).name;

pragma(msg, fname);

}
}

unittest
{

alias T = Query;
test!T();

}