Added output format parser to the Route service.

It is possible now to choose between json and flatbuffers (not yet implemented) output format.
Only route service is supported atm.
This commit is contained in:
Denis Chaplygin 2019-07-31 15:25:15 +03:00
parent 88979d0d86
commit 59ca7840f4
3 changed files with 16 additions and 1 deletions

View File

@ -70,12 +70,19 @@ struct BaseParameters
Any
};
enum class OutputFormatType
{
JSON,
FLATBUFFERS
};
std::vector<util::Coordinate> coordinates;
std::vector<boost::optional<Hint>> hints;
std::vector<boost::optional<double>> radiuses;
std::vector<boost::optional<Bearing>> bearings;
std::vector<boost::optional<Approach>> approaches;
std::vector<std::string> exclude;
boost::optional<OutputFormatType> format = OutputFormatType::JSON;
// Adds hints to response which can be included in subsequent requests, see `hints` above.
bool generate_hints = true;

View File

@ -169,6 +169,11 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::lit("snapping=") >
snapping_type[ph::bind(&engine::api::BaseParameters::snapping, qi::_r1) = qi::_1];
format_type.add(".json", engine::api::BaseParameters::OutputFormatType::JSON)
(".flatbuffers", engine::api::BaseParameters::OutputFormatType::FLATBUFFERS);
format_rule = -format_type[ph::bind(&engine::api::BaseParameters::format, qi::_r1) = qi::_1];
exclude_rule = qi::lit("exclude=") >
(qi::as_string[+qi::char_("a-zA-Z0-9")] %
',')[ph::bind(&engine::api::BaseParameters::exclude, qi::_r1) = qi::_1];
@ -185,6 +190,9 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
protected:
qi::rule<Iterator, Signature> base_rule;
qi::rule<Iterator, Signature> query_rule;
qi::rule<Iterator, Signature> format_rule;
qi::symbols<char, engine::api::BaseParameters::OutputFormatType> format_type;
qi::real_parser<double, json_policy> double_;

View File

@ -42,7 +42,7 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
qi::bool_[ph::bind(&engine::api::RouteParameters::continue_straight, qi::_r1) =
qi::_1]));
root_rule = query_rule(qi::_r1) > -qi::lit(".json") >
root_rule = query_rule(qi::_r1) > BaseGrammar::format_rule(qi::_r1) >
-('?' > (route_rule(qi::_r1) | base_rule(qi::_r1)) % '&');
}