diff options
| author | Rutger Broekhoff | 2026-08-28 21:12:55 +0200 |
|---|---|---|
| committer | Rutger Broekhoff | 2026-08-28 21:12:55 +0200 |
| commit | a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac (patch) | |
| tree | b4e0ec57c3799e9f649c6bfe27cb6c3313b97364 /server/src/api.cppm | |
| parent | 973aec43ea54bbf95b64fbcb636403401d1ca60e (diff) | |
| download | routemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.tar.gz routemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.zip | |
clang-format C++ sources
Diffstat (limited to 'server/src/api.cppm')
| -rw-r--r-- | server/src/api.cppm | 116 |
1 files changed, 68 insertions, 48 deletions
diff --git a/server/src/api.cppm b/server/src/api.cppm index caeb44c..66e8f45 100644 --- a/server/src/api.cppm +++ b/server/src/api.cppm | |||
| @@ -15,65 +15,85 @@ import :trace; | |||
| 15 | 15 | ||
| 16 | namespace { | 16 | namespace { |
| 17 | 17 | ||
| 18 | namespace chrono = std::chrono; | 18 | namespace chrono = std::chrono; |
| 19 | namespace json = boost::json; | 19 | namespace json = boost::json; |
| 20 | namespace views = std::views; | 20 | namespace views = std::views; |
| 21 | 21 | ||
| 22 | } // namespace <anonymous> | 22 | } // namespace |
| 23 | 23 | ||
| 24 | export | 24 | export namespace routemon::api { |
| 25 | namespace routemon::api { | ||
| 26 | 25 | ||
| 27 | struct relevant_road_closure { | 26 | struct relevant_road_closure |
| 28 | std::vector<geo::linestring> relevant_lss; | 27 | { |
| 29 | }; | 28 | std::vector<geo::linestring> relevant_lss; |
| 30 | auto tag_invoke(json::value_from_tag, json::value& jv, relevant_road_closure const& clo) -> void; | 29 | }; |
| 31 | 30 | ||
| 32 | struct relevant_situation { | 31 | struct relevant_situation |
| 33 | std::string id; | 32 | { |
| 34 | std::optional<geo::point> location; | 33 | std::string id; |
| 35 | std::vector<std::string> comments; | 34 | std::optional<geo::point> location; |
| 36 | std::vector<relevant_road_closure> relevant_road_closures; | 35 | std::vector<std::string> comments; |
| 37 | }; | 36 | std::vector<relevant_road_closure> relevant_road_closures; |
| 38 | auto tag_invoke(json::value_from_tag, json::value& jv, relevant_situation const& sit) -> void; | 37 | }; |
| 39 | 38 | ||
| 40 | struct track_segment { | 39 | struct track_segment |
| 41 | geo::linestring points; | 40 | { |
| 42 | }; | 41 | geo::linestring points; |
| 43 | auto tag_invoke(json::value_from_tag, json::value& jv, track_segment const& seg) -> void; | 42 | }; |
| 44 | 43 | ||
| 45 | struct track { | 44 | struct track |
| 46 | std::vector<track_segment> segments; | 45 | { |
| 47 | }; | 46 | std::vector<track_segment> segments; |
| 48 | auto tag_invoke(json::value_from_tag, json::value& jv, track const& track) -> void; | 47 | }; |
| 49 | 48 | ||
| 50 | struct process_gpx_result { | 49 | struct process_gpx_result |
| 51 | std::vector<track> tracks; | 50 | { |
| 52 | std::vector<relevant_situation> relevant_situations; | 51 | std::vector<track> tracks; |
| 53 | }; | 52 | std::vector<relevant_situation> relevant_situations; |
| 54 | auto tag_invoke(json::value_from_tag, json::value& jv, process_gpx_result const& res) -> void; | 53 | }; |
| 55 | 54 | ||
| 56 | struct sysinfo { | 55 | struct sysinfo |
| 57 | time::timestamp using_publication_of; | 56 | { |
| 58 | }; | 57 | time::timestamp using_publication_of; |
| 59 | auto tag_invoke(json::value_from_tag, json::value& jv, sysinfo const& info) -> void; | 58 | }; |
| 60 | 59 | ||
| 61 | class handler { | 60 | auto tag_invoke( |
| 62 | using lse_index_value = std::tuple<geo::box, std::shared_ptr<geo::linestring>, std::shared_ptr<datex2::road_closure>>; | 61 | json::value_from_tag, json::value& jv, relevant_road_closure const& clo) |
| 63 | using p_index_value = std::pair<geo::point, std::shared_ptr<datex2::road_closure>>; | 62 | -> void; |
| 64 | using lse_index = bgeo::index::rtree<lse_index_value, bgeo::index::quadratic<16>>; | 63 | auto tag_invoke( |
| 65 | using p_index = bgeo::index::rtree<p_index_value, bgeo::index::quadratic<16>>; | 64 | json::value_from_tag, json::value& jv, relevant_situation const& sit) |
| 65 | -> void; | ||
| 66 | auto tag_invoke(json::value_from_tag, json::value& jv, track_segment const& seg) | ||
| 67 | -> void; | ||
| 68 | auto tag_invoke(json::value_from_tag, json::value& jv, track const& track) | ||
| 69 | -> void; | ||
| 70 | auto tag_invoke( | ||
| 71 | json::value_from_tag, json::value& jv, process_gpx_result const& res) | ||
| 72 | -> void; | ||
| 73 | auto tag_invoke(json::value_from_tag, json::value& jv, sysinfo const& info) | ||
| 74 | -> void; | ||
| 66 | 75 | ||
| 67 | log::logger l_; | 76 | class handler |
| 68 | datex2::situation_publication pub_; | 77 | { |
| 69 | lse_index lse_index_; | 78 | using lse_index_value = std::tuple< |
| 70 | p_index p_index_; | 79 | geo::box, std::shared_ptr<geo::linestring>, |
| 80 | std::shared_ptr<datex2::road_closure>>; | ||
| 81 | using p_index_value = | ||
| 82 | std::pair<geo::point, std::shared_ptr<datex2::road_closure>>; | ||
| 83 | using lse_index = | ||
| 84 | bgeo::index::rtree<lse_index_value, bgeo::index::quadratic<16>>; | ||
| 85 | using p_index = bgeo::index::rtree<p_index_value, bgeo::index::quadratic<16>>; | ||
| 71 | 86 | ||
| 72 | public: | 87 | log::logger l_; |
| 73 | explicit handler(log::logger const& l, datex2::situation_publication pub); | 88 | datex2::situation_publication pub_; |
| 89 | lse_index lse_index_; | ||
| 90 | p_index p_index_; | ||
| 74 | 91 | ||
| 75 | auto process_gpx(gpx::file&& gpx_file) -> std::optional<process_gpx_result>; | 92 | public: |
| 76 | auto sysinfo() -> sysinfo; | 93 | explicit handler(log::logger const& l, datex2::situation_publication pub); |
| 77 | }; | 94 | |
| 95 | auto process_gpx(gpx::file&& gpx_file) -> std::optional<process_gpx_result>; | ||
| 96 | auto sysinfo() -> sysinfo; | ||
| 97 | }; | ||
| 78 | 98 | ||
| 79 | } // namespace routemon::api | 99 | } // namespace routemon::api |