summaryrefslogtreecommitdiffstats
path: root/server/src/api.cppm
diff options
context:
space:
mode:
authorRutger Broekhoff2026-08-28 21:12:55 +0200
committerRutger Broekhoff2026-08-28 21:12:55 +0200
commita5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac (patch)
treeb4e0ec57c3799e9f649c6bfe27cb6c3313b97364 /server/src/api.cppm
parent973aec43ea54bbf95b64fbcb636403401d1ca60e (diff)
downloadroutemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.tar.gz
routemon-a5d95afb96eb9a3b65d82f5f84bf8e4a4fb4c8ac.zip
clang-format C++ sources
Diffstat (limited to 'server/src/api.cppm')
-rw-r--r--server/src/api.cppm116
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
16namespace { 16namespace {
17 17
18 namespace chrono = std::chrono; 18namespace chrono = std::chrono;
19 namespace json = boost::json; 19namespace json = boost::json;
20 namespace views = std::views; 20namespace views = std::views;
21 21
22} // namespace <anonymous> 22} // namespace
23 23
24export 24export namespace routemon::api {
25namespace routemon::api {
26 25
27 struct relevant_road_closure { 26struct 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 { 31struct 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 { 39struct 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 { 44struct 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 { 49struct 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 { 55struct 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 { 60auto 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>>; 63auto 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;
66auto tag_invoke(json::value_from_tag, json::value& jv, track_segment const& seg)
67 -> void;
68auto tag_invoke(json::value_from_tag, json::value& jv, track const& track)
69 -> void;
70auto tag_invoke(
71 json::value_from_tag, json::value& jv, process_gpx_result const& res)
72 -> void;
73auto tag_invoke(json::value_from_tag, json::value& jv, sysinfo const& info)
74 -> void;
66 75
67 log::logger l_; 76class 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>; 92public:
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