From 7ddda105a388ffb141cc41f067a0380058edc96e Mon Sep 17 00:00:00 2001 From: Denis Chaplygin Date: Mon, 5 Aug 2019 13:46:13 +0300 Subject: [PATCH] Added flatbuffers support to the PluginBase::Error This changes BREAKS osrm. --- CMakeLists.txt | 2 ++ include/engine/api/base_result.hpp | 3 ++- include/engine/plugins/plugin_base.hpp | 27 ++++++++++++++++++++++---- src/engine/plugins/table.cpp | 2 +- src/server/service/table_service.cpp | 6 ++++++ 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0f83f264..73ed0a295 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -440,6 +440,8 @@ set(VTZERO_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vtzero/include") include_directories(SYSTEM ${VTZERO_INCLUDE_DIR}) set(FLATBUFFERS_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers") +set(FLATBUFFERS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include") +include_directories(${FLATBUFFERS_INCLUDE_DIR}) add_subdirectory(${FLATBUFFERS_SRC_DIR} ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build EXCLUDE_FROM_ALL) diff --git a/include/engine/api/base_result.hpp b/include/engine/api/base_result.hpp index ae599b542..8ca858526 100644 --- a/include/engine/api/base_result.hpp +++ b/include/engine/api/base_result.hpp @@ -1,6 +1,7 @@ #ifndef ENGINE_API_BASE_RESULT_HPP #define ENGINE_API_BASE_RESULT_HPP +#include #include #include @@ -13,7 +14,7 @@ namespace engine { namespace api { - using ResultT = mapbox::util::variant; + using ResultT = mapbox::util::variant; } // ns api } // ns engine } // ns osrm diff --git a/include/engine/plugins/plugin_base.hpp b/include/engine/plugins/plugin_base.hpp index 5db8d6bc0..761e937ed 100644 --- a/include/engine/plugins/plugin_base.hpp +++ b/include/engine/plugins/plugin_base.hpp @@ -3,6 +3,7 @@ #include "engine/api/base_parameters.hpp" #include "engine/api/base_result.hpp" +#include "engine/api/flatbuffers/fbresult_generated.h" #include "engine/datafacade/datafacade_base.hpp" #include "engine/phantom_node.hpp" #include "engine/routing_algorithms.hpp" @@ -63,14 +64,32 @@ class BasePlugin return false; } + struct ErrorRenderer { + std::string code; + std::string message; + + ErrorRenderer(std::string code, std::string message) : code(std::move(code)), message(std::move(message)) {}; + + void operator()(util::json::Object& json_result) { + json_result.values["code"] = code; + json_result.values["message"] = message; + }; + void operator()(flatbuffers::FlatBufferBuilder& fb_result) { + osrm::engine::api::fbresult::FBResultBuilder error(fb_result); + error.add_code(fb_result.CreateString(code)); + error.add_message(fb_result.CreateString(message)); + fb_result.Finish(error.Finish()); + }; + void operator()(std::string& str_result) { + str_result = str(boost::format("code=%1% message=%2%") % code % message); + }; + }; + Status Error(const std::string &code, const std::string &message, osrm::engine::api::ResultT &result) const { - result = util::json::Object(); - auto& json_result = result.get(); - json_result.values["code"] = code; - json_result.values["message"] = message; + mapbox::util::apply_visitor(ErrorRenderer(code, message), result); return Status::Error; } diff --git a/src/engine/plugins/table.cpp b/src/engine/plugins/table.cpp index 07dbc971a..72ede71c8 100644 --- a/src/engine/plugins/table.cpp +++ b/src/engine/plugins/table.cpp @@ -33,7 +33,6 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, const api::TableParameters ¶ms, osrm::engine::api::ResultT &result) const { - auto& json_result = result.get(); if (!algorithms.HasManyToManySearch()) { return Error("NotImplemented", @@ -155,6 +154,7 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, } api::TableAPI table_api{facade, params}; + auto& json_result = result.get(); table_api.MakeResponse(result_tables_pair, snapped_phantoms, estimated_pairs, json_result); return Status::Ok; diff --git a/src/server/service/table_service.cpp b/src/server/service/table_service.cpp index b50c142ff..2eeb206c1 100644 --- a/src/server/service/table_service.cpp +++ b/src/server/service/table_service.cpp @@ -97,6 +97,12 @@ TableService::RunQuery(std::size_t prefix_length, std::string &query, osrm::engi } BOOST_ASSERT(parameters->IsValid()); + if (parameters->format) + { + if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { + result = flatbuffers::FlatBufferBuilder(); + } + } return BaseService::routing_machine.Table(*parameters, result); } }