#include "server/api/parameters_parser.hpp" #include "server/api/route_parameters_grammar.hpp" #include "server/api/table_parameter_grammar.hpp" #include "server/api/nearest_parameter_grammar.hpp" #include "server/api/trip_parameter_grammar.hpp" #include "server/api/match_parameter_grammar.hpp" namespace osrm { namespace server { namespace api { namespace detail { template using is_grammar_t = std::is_base_of; template ::value, int>::type = 0, typename std::enable_if::value, int>::type = 0> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { GrammarT grammar; const auto result = boost::spirit::qi::parse(iter, end, grammar); boost::optional parameters; if (result && iter == end) parameters = std::move(grammar.parameters); return parameters; } } // ns detail template <> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { return detail::parseParameters(iter, end); } template <> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { return detail::parseParameters(iter, end); } template <> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { return detail::parseParameters(iter, end); } template <> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { return detail::parseParameters(iter, end); } template <> boost::optional parseParameters(std::string::iterator &iter, std::string::iterator end) { return detail::parseParameters(iter, end); } } // ns api } // ns server } // ns osrm