#pragma once #include "cJSON.h" #include "esp_log.h" #include "external/mtr/station_info.h" #include "external/mtr/mtr.h" #include #include #define LINE_INFO_TAG "LineInfo" // Forward declaration class MTRNextTrainHandler; struct StationInfo; struct LineInfo { public: // caller does not own the returned char pointers const char* code() const { return _code.c_str(); } // caller does not own the returned char pointers const char* name() const { return _name.c_str(); } // caller does not own the returned char pointers const char* color() const { return _color.c_str(); } size_t station_count() const { return _stations.size(); } // caller does not own the returned array or StationInfo pointers const std::vector* stations() const { return &_stations; } const char* get_station_name(const std::string& station_code) const; friend class MTRNextTrainHandler; private: // Caller transfers ownership of stations array and its contents to LineInfo LineInfo( cJSON* line_json ); std::string _code; std::string _name; std::string _color; std::vector _stations; };