0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-17 23:40:57 +01:00

ircd::json: Use the ircd::spirit expectation_failure.

This commit is contained in:
Jason Volk 2019-02-26 10:55:53 -08:00
parent 70e0fe221f
commit 7b226d5477
2 changed files with 31 additions and 25 deletions

View file

@ -21,7 +21,6 @@ namespace ircd::json
IRCD_EXCEPTION(error, type_error); IRCD_EXCEPTION(error, type_error);
IRCD_EXCEPTION(error, not_found); IRCD_EXCEPTION(error, not_found);
IRCD_EXCEPTION(parse_error, recursion_limit); IRCD_EXCEPTION(parse_error, recursion_limit);
struct expectation_failure;
struct value; struct value;
struct member; struct member;

View file

@ -21,6 +21,8 @@ namespace ircd::json
// Instantiations of the grammars // Instantiations of the grammars
struct parser extern const parser; struct parser extern const parser;
struct printer extern const printer; struct printer extern const printer;
const size_t &error_show_max {48};
} }
BOOST_FUSION_ADAPT_STRUCT BOOST_FUSION_ADAPT_STRUCT
@ -284,22 +286,6 @@ struct ircd::json::output
} }
}; };
struct ircd::json::expectation_failure
:parse_error
{
expectation_failure(const char *const &start,
const qi::expectation_failure<const char *> &e,
const ssize_t &show_max = 64)
:parse_error
{
"Expected %s. You input %zd invalid characters at position %zd: %s",
ircd::string(e.what_),
std::distance(e.first, e.last),
std::distance(start, e.first),
string_view{e.first, e.first + std::min(std::distance(e.first, e.last), show_max)}
}{}
};
struct ircd::json::parser struct ircd::json::parser
:input :input
{ {
@ -1889,7 +1875,10 @@ try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(start, e); throw expectation_failure<parse_error>
{
e, start, error_show_max
};
} }
ircd::json::vector::const_iterator ircd::json::vector::const_iterator
@ -1918,7 +1907,10 @@ const try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(string_view::begin(), e); throw expectation_failure<parse_error>
{
e, string_view::data(), error_show_max
};
} }
ircd::json::vector::const_iterator ircd::json::vector::const_iterator
@ -2151,7 +2143,10 @@ const try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(string_view::begin(), e); throw expectation_failure<parse_error>
{
e, string_view::begin(), error_show_max
};
} }
ircd::json::object::const_iterator ircd::json::object::const_iterator
@ -2229,7 +2224,10 @@ try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(start, e); throw expectation_failure<parse_error>
{
e, start, error_show_max
};
} }
// //
@ -2525,7 +2523,10 @@ const try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(string_view::begin(), e); throw expectation_failure<parse_error>
{
e, string_view::data(), error_show_max
};
} }
ircd::json::array::const_iterator ircd::json::array::const_iterator
@ -2625,7 +2626,10 @@ try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(start, e); throw expectation_failure<parse_error>
{
e, start, error_show_max
};
} }
bool bool
@ -3737,7 +3741,7 @@ try
valid(s); valid(s);
return {}; return {};
} }
catch(const expectation_failure &e) catch(const std::exception &e)
{ {
return e.what(); return e.what();
} }
@ -3774,7 +3778,10 @@ try
} }
catch(const qi::expectation_failure<const char *> &e) catch(const qi::expectation_failure<const char *> &e)
{ {
throw expectation_failure(begin(s), e); throw expectation_failure<parse_error>
{
e, begin(s), error_show_max
};
} }
void void