export module routemon:gpx; import std; import :geo; import :util; import :xml; namespace routemon::gpx { struct metadata { std::optional name; std::optional desc; }; struct track_segment { geo::linestring waypoints; }; struct track { std::optional name; std::optional desc; std::vector segments; }; struct file { std::string creator; metadata meta; std::vector tracks; }; class reader { xml::executor e_; xml::parser p_; public: explicit reader(); auto init() -> void; auto put(std::string_view buf) -> void; [[nodiscard]] auto finish() -> gpx::file; }; } // namespace routemon::gpx