0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-29 00:03:45 +02:00

ircd:Ⓜ️🆔 Improve expectation failure element propagation into error strings.

This commit is contained in:
Jason Volk 2018-03-16 14:25:36 -07:00
parent 8eb1f4df40
commit 61009aed64

View file

@ -66,7 +66,7 @@ struct ircd::m::id::input
room_id_sigil |
room_alias_sigil |
group_id_sigil |
node_sigil |
node_sigil |
device_sigil
,"sigil"
};
@ -81,7 +81,7 @@ struct ircd::m::id::input
// a localpart is zero or more localpart characters
const rule<> localpart
{
*(localpart_char)
*localpart_char
,"localpart"
};
@ -274,14 +274,21 @@ ircd::m::id::parser::operator()(const id::sigil &sigil,
const string_view &id)
const try
{
const rule<> sigil_type
{
&lit(char(sigil))
,"sigil type"
};
const rule<string_view> view_mxid
{
raw[&lit(char(sigil)) > mxid]
raw[eps > (sigil_type > mxid)]
};
string_view out;
const char *start{id.begin()};
qi::parse(start, id.end(), eps > view_mxid, out);
const bool res(qi::parse(start, id.end(), view_mxid, out));
assert(res == true);
return out;
}
catch(const qi::expectation_failure<const char *> &e)
@ -295,12 +302,13 @@ const try
{
static const rule<string_view> view_mxid
{
raw[mxid]
raw[eps > mxid]
};
string_view out;
const char *start{id.begin()};
qi::parse(start, id.end(), eps > view_mxid, out);
const bool res(qi::parse(start, id.end(), view_mxid, out));
assert(res == true);
return out;
}
catch(const qi::expectation_failure<const char *> &e)
@ -321,7 +329,8 @@ ircd::m::id::validator::operator()(const string_view &id)
const try
{
const char *start{id.begin()};
qi::parse(start, id.end(), eps > mxid);
const bool ret(qi::parse(start, id.end(), eps > mxid));
assert(ret == true);
}
catch(const qi::expectation_failure<const char *> &e)
{
@ -333,13 +342,20 @@ ircd::m::id::validator::operator()(const id::sigil &sigil,
const string_view &id)
const try
{
const rule<string_view> valid_mxid
const rule<> sigil_type
{
&lit(char(sigil)) > mxid
&lit(char(sigil))
,"sigil type"
};
const rule<> valid_mxid
{
eps > (sigil_type > mxid)
};
const char *start{id.begin()};
qi::parse(start, id.end(), eps > valid_mxid);
const bool ret(qi::parse(start, id.end(), valid_mxid));
assert(ret == true);
}
catch(const qi::expectation_failure<const char *> &e)
{