File indexing completed on 2024-05-12 04:42:37

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KPUBLICTRANSPORT_IVVASSPARSER_H
0008 #define KPUBLICTRANSPORT_IVVASSPARSER_H
0009 
0010 #include <KPublicTransport/Location>
0011 
0012 #include <QDateTime>
0013 #include <QString>
0014 #include <QTimeZone>
0015 
0016 #include <vector>
0017 
0018 class QByteArray;
0019 class QJsonObject;
0020 
0021 namespace KPublicTransport {
0022 
0023 class Journey;
0024 class Stopover;
0025 
0026 /** Parser for IVV ASS responses. */
0027 class IvvAssParser
0028 {
0029 public:
0030     explicit IvvAssParser(const QTimeZone &tz, const QString &locationIdentifier);
0031 
0032     std::vector<Location> parseLocations(const QByteArray &data);
0033     std::vector<Stopover> parseStopovers(const QByteArray &data);
0034     std::vector<Journey> parseJourneys(const QByteArray &data);
0035 
0036     QString errorMessage;
0037 
0038 private:
0039     bool parseError(const QJsonObject &top);
0040 
0041     struct EventTime {
0042         QDateTime scheduled;
0043         QDateTime expected;
0044     };
0045     EventTime parseTime(const QJsonObject &obj, const char *baseKey, const char *scheduledKey) const;
0046 
0047     struct LocationData
0048     {
0049         Location loc;
0050         QString platform;
0051     };
0052     LocationData parseLocation(const QJsonObject &stopObj) const;
0053 
0054     QTimeZone m_timezone;
0055     QString m_locationIdentifier;
0056 };
0057 
0058 }
0059 
0060 #endif // KPUBLICTRANSPORT_IVVASSPARSER_H