From 973aec43ea54bbf95b64fbcb636403401d1ca60e Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Fri, 28 Aug 2026 18:03:05 +0200 Subject: Import from e4b104792206ee7ea64bf39c6b7d2c0c230f9d14 --- server/src/api.cppm | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 server/src/api.cppm (limited to 'server/src/api.cppm') diff --git a/server/src/api.cppm b/server/src/api.cppm new file mode 100644 index 0000000..caeb44c --- /dev/null +++ b/server/src/api.cppm @@ -0,0 +1,79 @@ +module; + +#include +#include + +export module routemon:api; + +import std; +import :datex2; +import :geo; +import :gpx; +import :log; +import :time; +import :trace; + +namespace { + + namespace chrono = std::chrono; + namespace json = boost::json; + namespace views = std::views; + +} // namespace + +export +namespace routemon::api { + + struct relevant_road_closure { + std::vector relevant_lss; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, relevant_road_closure const& clo) -> void; + + struct relevant_situation { + std::string id; + std::optional location; + std::vector comments; + std::vector relevant_road_closures; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, relevant_situation const& sit) -> void; + + struct track_segment { + geo::linestring points; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, track_segment const& seg) -> void; + + struct track { + std::vector segments; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, track const& track) -> void; + + struct process_gpx_result { + std::vector tracks; + std::vector relevant_situations; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, process_gpx_result const& res) -> void; + + struct sysinfo { + time::timestamp using_publication_of; + }; + auto tag_invoke(json::value_from_tag, json::value& jv, sysinfo const& info) -> void; + + class handler { + using lse_index_value = std::tuple, std::shared_ptr>; + using p_index_value = std::pair>; + using lse_index = bgeo::index::rtree>; + using p_index = bgeo::index::rtree>; + + log::logger l_; + datex2::situation_publication pub_; + lse_index lse_index_; + p_index p_index_; + + public: + explicit handler(log::logger const& l, datex2::situation_publication pub); + + auto process_gpx(gpx::file&& gpx_file) -> std::optional; + auto sysinfo() -> sysinfo; + }; + +} // namespace routemon::api -- cgit v1.3