summaryrefslogtreecommitdiffstats
path: root/server/src/gpx.cppm
diff options
context:
space:
mode:
authorRutger Broekhoff2026-08-28 18:03:05 +0200
committerRutger Broekhoff2026-08-28 18:03:05 +0200
commit973aec43ea54bbf95b64fbcb636403401d1ca60e (patch)
tree41b7911c420766a9b463245b9296f44c5bf35258 /server/src/gpx.cppm
downloadroutemon-973aec43ea54bbf95b64fbcb636403401d1ca60e.tar.gz
routemon-973aec43ea54bbf95b64fbcb636403401d1ca60e.zip
Import from e4b104792206ee7ea64bf39c6b7d2c0c230f9d14
Diffstat (limited to 'server/src/gpx.cppm')
-rw-r--r--server/src/gpx.cppm43
1 files changed, 43 insertions, 0 deletions
diff --git a/server/src/gpx.cppm b/server/src/gpx.cppm
new file mode 100644
index 0000000..20e6242
--- /dev/null
+++ b/server/src/gpx.cppm
@@ -0,0 +1,43 @@
1export module routemon:gpx;
2
3import std;
4import :geo;
5import :util;
6import :xml;
7
8namespace routemon::gpx {
9
10 struct metadata {
11 std::optional<std::string> name;
12 std::optional<std::string> desc;
13 };
14
15 struct track_segment {
16 geo::linestring waypoints;
17 };
18
19 struct track {
20 std::optional<std::string> name;
21 std::optional<std::string> desc;
22 std::vector<track_segment> segments;
23 };
24
25 struct file {
26 std::string creator;
27 metadata meta;
28 std::vector<track> tracks;
29 };
30
31 class reader {
32 xml::executor e_;
33 xml::parser<file> p_;
34
35 public:
36 explicit reader();
37
38 auto init() -> void;
39 auto put(std::string_view buf) -> void;
40 [[nodiscard]] auto finish() -> gpx::file;
41 };
42
43} // namespace routemon::gpx