Files
ink-board/main/external/mtr/arrival.h

68 lines
1.7 KiB
C++

#pragma once
#include "external/mtr/arrival.h"
#include "cJSON.h"
#include "external/mtr/mtr.h"
#include <string>
#include <vector>
// Forward declaration
class MTRNextTrainHandler;
struct ArrivalInfo {
public:
// Caller transfers ownership of arrival_time to ArrivalInfo
ArrivalInfo(
const std::string& arrival_time,
const std::string& destination_name
) : _arrival_time(arrival_time)
, _destination_name(destination_name) { }
const char* arrival_time() const {
return _arrival_time.c_str();
}
const char* destination() const {
return _destination_name.c_str();
}
private:
const std::string _arrival_time;
const std::string _destination_name; // not the code of the station
};
enum StatusEnum {
SUCCESSFUL_WITHOUT_DELAY = 0,
SUCCESSFUL_WITH_DELAY = 1,
FAILED_WITH_MESSAGE = 2,
UNKNOWN_STATUS = 3
};
struct StationArrivalInfo {
public:
friend class MTRNextTrainHandler;
// Public accessors
StatusEnum status() const { return _status; }
const char* message() const { return _message.c_str(); }
const char* train_line() const { return _train_line.c_str(); }
const char* train_station() const { return _train_station.c_str(); }
const std::vector<ArrivalInfo>* up_arrivals() const { return &_up_arrivals; }
const std::vector<ArrivalInfo>* down_arrivals() const { return &_down_arrivals; }
private:
StationArrivalInfo(
cJSON* mtr_line_station_json,
cJSON* arrival_json,
const std::string& train_line_code,
const std::string& train_station_code
);
StatusEnum _status;
std::string _message; // only valid if status == FAILED_WITH_MESSAGE
std::string _train_line;
std::string _train_station;
std::vector<ArrivalInfo> _up_arrivals;
std::vector<ArrivalInfo> _down_arrivals;
};