Passed ResultT down to engine plugins, so now they can form replies in different formats.

This commit is contained in:
Denis Chaplygin
2019-08-02 17:40:55 +03:00
parent f6f86b2a52
commit 75aadb0f3f
32 changed files with 136 additions and 99 deletions
+21
View File
@@ -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
View File
@@ -33,16 +33,17 @@ class EngineInterface
public:
virtual ~EngineInterface() = default;
virtual Status Route(const api::RouteParameters &parameters,
util::json::Object &result) const = 0;
api::ResultT &result) const = 0;
virtual Status Table(const api::TableParameters &parameters,
util::json::Object &result) const = 0;
api::ResultT &result) const = 0;
virtual Status Nearest(const api::NearestParameters &parameters,
util::json::Object &result) const = 0;
api::ResultT &result) const = 0;
virtual Status Trip(const api::TripParameters &parameters,
util::json::Object &result) const = 0;
api::ResultT &result) const = 0;
virtual Status Match(const api::MatchParameters &parameters,
util::json::Object &result) const = 0;
virtual Status Tile(const api::TileParameters &parameters, std::string &result) const = 0;
api::ResultT &result) const = 0;
virtual Status Tile(const api::TileParameters &parameters,
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 &params,
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 &params,
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 &params,
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 &params, util::json::Object &result) const override final
Status Trip(const api::TripParameters &params,
api::ResultT &result) const override final
{
return trip_plugin.HandleRequest(GetAlgorithms(params), params, result);
}
Status Match(const api::MatchParameters &params,
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 &params, std::string &result) const override final
Status Tile(const api::TileParameters &params,
api::ResultT &result) const override final
{
return tile_plugin.HandleRequest(GetAlgorithms(params), params, result);
}
+1 -1
View File
@@ -32,7 +32,7 @@ class MatchPlugin : public BasePlugin
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
const api::MatchParameters &parameters,
util::json::Object &json_result) const;
osrm::engine::api::ResultT &json_result) const;
private:
const int max_locations_map_matching;
+1 -1
View File
@@ -21,7 +21,7 @@ class NearestPlugin final : public BasePlugin
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
const api::NearestParameters &params,
util::json::Object &result) const;
osrm::engine::api::ResultT &result) const;
private:
const int max_results;
+5 -2
View File
@@ -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 &params,
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;
+1 -1
View File
@@ -22,7 +22,7 @@ class TablePlugin final : public BasePlugin
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
const api::TableParameters &params,
util::json::Object &result) const;
osrm::engine::api::ResultT &result) const;
private:
const int max_locations_distance_table;
+1 -1
View File
@@ -28,7 +28,7 @@ class TilePlugin final : public BasePlugin
public:
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
const api::TileParameters &parameters,
std::string &pbf_buffer) const;
osrm::engine::api::ResultT &pbf_buffer) const;
};
}
}
+1 -1
View File
@@ -40,7 +40,7 @@ class TripPlugin final : public BasePlugin
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
const api::TripParameters &parameters,
util::json::Object &json_result) const;
osrm::engine::api::ResultT &json_result) const;
};
}
}
+1 -1
View File
@@ -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;
};
}
}