Passed ResultT down to engine plugins, so now they can form replies in different formats.
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
#ifndef ENGINE_API_BASE_RESULT_HPP
|
||||
#define ENGINE_API_BASE_RESULT_HPP
|
||||
|
||||
#include <mapbox/variant.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "util/json_container.hpp"
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace engine
|
||||
{
|
||||
namespace api
|
||||
{
|
||||
using ResultT = mapbox::util::variant<util::json::Object, std::string>;
|
||||
} // ns api
|
||||
} // ns engine
|
||||
} // ns osrm
|
||||
|
||||
#endif
|
||||
+15
-12
@@ -33,16 +33,17 @@ class EngineInterface
|
||||
public:
|
||||
virtual ~EngineInterface() = default;
|
||||
virtual Status Route(const api::RouteParameters ¶meters,
|
||||
util::json::Object &result) const = 0;
|
||||
api::ResultT &result) const = 0;
|
||||
virtual Status Table(const api::TableParameters ¶meters,
|
||||
util::json::Object &result) const = 0;
|
||||
api::ResultT &result) const = 0;
|
||||
virtual Status Nearest(const api::NearestParameters ¶meters,
|
||||
util::json::Object &result) const = 0;
|
||||
api::ResultT &result) const = 0;
|
||||
virtual Status Trip(const api::TripParameters ¶meters,
|
||||
util::json::Object &result) const = 0;
|
||||
api::ResultT &result) const = 0;
|
||||
virtual Status Match(const api::MatchParameters ¶meters,
|
||||
util::json::Object &result) const = 0;
|
||||
virtual Status Tile(const api::TileParameters ¶meters, std::string &result) const = 0;
|
||||
api::ResultT &result) const = 0;
|
||||
virtual Status Tile(const api::TileParameters ¶meters,
|
||||
api::ResultT &result) const = 0;
|
||||
};
|
||||
|
||||
template <typename Algorithm> class Engine final : public EngineInterface
|
||||
@@ -90,35 +91,37 @@ template <typename Algorithm> class Engine final : public EngineInterface
|
||||
virtual ~Engine() = default;
|
||||
|
||||
Status Route(const api::RouteParameters ¶ms,
|
||||
util::json::Object &result) const override final
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return route_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
Status Table(const api::TableParameters ¶ms,
|
||||
util::json::Object &result) const override final
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return table_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
Status Nearest(const api::NearestParameters ¶ms,
|
||||
util::json::Object &result) const override final
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return nearest_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
Status Trip(const api::TripParameters ¶ms, util::json::Object &result) const override final
|
||||
Status Trip(const api::TripParameters ¶ms,
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return trip_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
Status Match(const api::MatchParameters ¶ms,
|
||||
util::json::Object &result) const override final
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return match_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
Status Tile(const api::TileParameters ¶ms, std::string &result) const override final
|
||||
Status Tile(const api::TileParameters ¶ms,
|
||||
api::ResultT &result) const override final
|
||||
{
|
||||
return tile_plugin.HandleRequest(GetAlgorithms(params), params, result);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ class MatchPlugin : public BasePlugin
|
||||
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::MatchParameters ¶meters,
|
||||
util::json::Object &json_result) const;
|
||||
osrm::engine::api::ResultT &json_result) const;
|
||||
|
||||
private:
|
||||
const int max_locations_map_matching;
|
||||
|
||||
@@ -21,7 +21,7 @@ class NearestPlugin final : public BasePlugin
|
||||
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::NearestParameters ¶ms,
|
||||
util::json::Object &result) const;
|
||||
osrm::engine::api::ResultT &result) const;
|
||||
|
||||
private:
|
||||
const int max_results;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define BASE_PLUGIN_HPP
|
||||
|
||||
#include "engine/api/base_parameters.hpp"
|
||||
#include "engine/api/base_result.hpp"
|
||||
#include "engine/datafacade/datafacade_base.hpp"
|
||||
#include "engine/phantom_node.hpp"
|
||||
#include "engine/routing_algorithms.hpp"
|
||||
@@ -39,7 +40,7 @@ class BasePlugin
|
||||
|
||||
bool CheckAlgorithms(const api::BaseParameters ¶ms,
|
||||
const RoutingAlgorithmsInterface &algorithms,
|
||||
util::json::Object &result) const
|
||||
osrm::engine::api::ResultT &result) const
|
||||
{
|
||||
if (algorithms.IsValid())
|
||||
{
|
||||
@@ -64,8 +65,10 @@ class BasePlugin
|
||||
|
||||
Status Error(const std::string &code,
|
||||
const std::string &message,
|
||||
util::json::Object &json_result) const
|
||||
osrm::engine::api::ResultT &result) const
|
||||
{
|
||||
result = util::json::Object();
|
||||
auto& json_result = result.get<util::json::Object>();
|
||||
json_result.values["code"] = code;
|
||||
json_result.values["message"] = message;
|
||||
return Status::Error;
|
||||
|
||||
@@ -22,7 +22,7 @@ class TablePlugin final : public BasePlugin
|
||||
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::TableParameters ¶ms,
|
||||
util::json::Object &result) const;
|
||||
osrm::engine::api::ResultT &result) const;
|
||||
|
||||
private:
|
||||
const int max_locations_distance_table;
|
||||
|
||||
@@ -28,7 +28,7 @@ class TilePlugin final : public BasePlugin
|
||||
public:
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::TileParameters ¶meters,
|
||||
std::string &pbf_buffer) const;
|
||||
osrm::engine::api::ResultT &pbf_buffer) const;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class TripPlugin final : public BasePlugin
|
||||
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::TripParameters ¶meters,
|
||||
util::json::Object &json_result) const;
|
||||
osrm::engine::api::ResultT &json_result) const;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class ViaRoutePlugin final : public BasePlugin
|
||||
|
||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
const api::RouteParameters &route_parameters,
|
||||
util::json::Object &json_result) const;
|
||||
osrm::engine::api::ResultT &json_result) const;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#include "osrm/osrm_fwd.hpp"
|
||||
#include "osrm/status.hpp"
|
||||
#include "engine/api/base_result.hpp"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -83,7 +84,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, RouteParameters and json::Object
|
||||
*/
|
||||
Status Route(const RouteParameters ¶meters, json::Object &result) const;
|
||||
Status Route(const RouteParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
/**
|
||||
* Distance tables for coordinates.
|
||||
@@ -92,7 +93,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TableParameters and json::Object
|
||||
*/
|
||||
Status Table(const TableParameters ¶meters, json::Object &result) const;
|
||||
Status Table(const TableParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
/**
|
||||
* Nearest street segment for coordinate.
|
||||
@@ -101,7 +102,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, NearestParameters and json::Object
|
||||
*/
|
||||
Status Nearest(const NearestParameters ¶meters, json::Object &result) const;
|
||||
Status Nearest(const NearestParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
/**
|
||||
* Trip: shortest round trip between coordinates.
|
||||
@@ -110,7 +111,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TripParameters and json::Object
|
||||
*/
|
||||
Status Trip(const TripParameters ¶meters, json::Object &result) const;
|
||||
Status Trip(const TripParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
/**
|
||||
* Match: snaps noisy coordinate traces to the road network
|
||||
@@ -119,7 +120,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, MatchParameters and json::Object
|
||||
*/
|
||||
Status Match(const MatchParameters ¶meters, json::Object &result) const;
|
||||
Status Match(const MatchParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
/**
|
||||
* Tile: vector tiles with internal graph representation
|
||||
@@ -128,7 +129,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TileParameters and json::Object
|
||||
*/
|
||||
Status Tile(const TileParameters ¶meters, std::string &result) const;
|
||||
Status Tile(const TileParameters ¶meters, osrm::engine::api::ResultT &result) const;
|
||||
|
||||
private:
|
||||
std::unique_ptr<engine::EngineInterface> engine_;
|
||||
|
||||
@@ -20,13 +20,11 @@ namespace service
|
||||
class BaseService
|
||||
{
|
||||
public:
|
||||
using ResultT = mapbox::util::variant<util::json::Object, std::string>;
|
||||
|
||||
BaseService(OSRM &routing_machine) : routing_machine(routing_machine) {}
|
||||
virtual ~BaseService() = default;
|
||||
|
||||
virtual engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) = 0;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) = 0;
|
||||
|
||||
virtual unsigned GetVersion() = 0;
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ class MatchService final : public BaseService
|
||||
MatchService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ class NearestService final : public BaseService
|
||||
NearestService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ class RouteService final : public BaseService
|
||||
RouteService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ class TableService final : public BaseService
|
||||
TableService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ class TileService final : public BaseService
|
||||
TileService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ class TripService final : public BaseService
|
||||
TripService(OSRM &routing_machine) : BaseService(routing_machine) {}
|
||||
|
||||
engine::Status
|
||||
RunQuery(std::size_t prefix_length, std::string &query, ResultT &result) final override;
|
||||
RunQuery(std::size_t prefix_length, std::string &query, osrm::engine::api::ResultT &result) final override;
|
||||
|
||||
unsigned GetVersion() final override { return 1; }
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "server/service/base_service.hpp"
|
||||
|
||||
#include "osrm/osrm.hpp"
|
||||
#include "engine/api/base_api.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -28,14 +29,14 @@ class ServiceHandlerInterface
|
||||
public:
|
||||
virtual ~ServiceHandlerInterface() {}
|
||||
virtual engine::Status RunQuery(api::ParsedURL parsed_url,
|
||||
service::BaseService::ResultT &result) = 0;
|
||||
osrm::engine::api::ResultT &result) = 0;
|
||||
};
|
||||
|
||||
class ServiceHandler final : public ServiceHandlerInterface
|
||||
{
|
||||
public:
|
||||
ServiceHandler(osrm::EngineConfig &config);
|
||||
using ResultT = service::BaseService::ResultT;
|
||||
using ResultT = osrm::engine::api::ResultT;
|
||||
|
||||
virtual engine::Status RunQuery(api::ParsedURL parsed_url, ResultT &result) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user