diff --git a/include/engine/api/base_parameters.hpp b/include/engine/api/base_parameters.hpp index 91ac937b4..4e3628459 100644 --- a/include/engine/api/base_parameters.hpp +++ b/include/engine/api/base_parameters.hpp @@ -70,12 +70,19 @@ struct BaseParameters Any }; + enum class OutputFormatType + { + JSON, + FLATBUFFERS + }; + std::vector coordinates; std::vector> hints; std::vector> radiuses; std::vector> bearings; std::vector> approaches; std::vector exclude; + boost::optional format = OutputFormatType::JSON; // Adds hints to response which can be included in subsequent requests, see `hints` above. bool generate_hints = true; diff --git a/include/server/api/base_parameters_grammar.hpp b/include/server/api/base_parameters_grammar.hpp index 5615ee53f..c7fc2e091 100644 --- a/include/server/api/base_parameters_grammar.hpp +++ b/include/server/api/base_parameters_grammar.hpp @@ -169,6 +169,11 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar 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 protected: qi::rule base_rule; qi::rule query_rule; + qi::rule format_rule; + + qi::symbols format_type; qi::real_parser double_; diff --git a/include/server/api/route_parameters_grammar.hpp b/include/server/api/route_parameters_grammar.hpp index 21463f6ee..71beb971a 100644 --- a/include/server/api/route_parameters_grammar.hpp +++ b/include/server/api/route_parameters_grammar.hpp @@ -42,7 +42,7 @@ struct RouteParametersGrammar : public BaseParametersGrammar -qi::lit(".json") > + root_rule = query_rule(qi::_r1) > BaseGrammar::format_rule(qi::_r1) > -('?' > (route_rule(qi::_r1) | base_rule(qi::_r1)) % '&'); }