File indexing completed on 2024-05-12 04:42:38
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_NAVITIAPARSER_H 0008 #define KPUBLICTRANSPORT_NAVITIAPARSER_H 0009 0010 #include "kpublictransport_export.h" 0011 0012 #include <QJsonArray> 0013 #include <QUrl> 0014 0015 #include <vector> 0016 0017 class QByteArray; 0018 class QString; 0019 0020 namespace KPublicTransport { 0021 0022 class Attribution; 0023 class Journey; 0024 class JourneySection; 0025 class Location; 0026 class Stopover; 0027 0028 /** Navitia REST response parser. 0029 * @internal exported for unit tests only 0030 */ 0031 class KPUBLICTRANSPORT_EXPORT NavitiaParser 0032 { 0033 public: 0034 explicit NavitiaParser(); 0035 ~NavitiaParser(); 0036 0037 std::vector<Journey> parseJourneys(const QByteArray &data); 0038 std::vector<Stopover> parseDepartures(const QByteArray &data); 0039 std::vector<Location> parsePlacesNearby(const QByteArray &data); 0040 std::vector<Location> parsePlaces(const QByteArray &data); 0041 0042 static QString parseErrorMessage(const QByteArray &data); 0043 0044 QUrl nextLink; 0045 QUrl prevLink; 0046 0047 std::vector<Attribution> attributions; 0048 0049 private: 0050 void parseLinks(const QJsonArray &links); 0051 void parseAttributions(const QJsonArray &feeds); 0052 template <typename T> void parseDisruptionLink(T &element, const QJsonObject &link) const; 0053 QJsonObject findDisruption(const QString &id) const; 0054 JourneySection parseJourneySection(const QJsonObject &obj) const; 0055 Journey parseJourney(const QJsonObject &obj) const; 0056 Stopover parseDeparture(const QJsonObject &obj) const; 0057 0058 QJsonArray m_disruptions; 0059 }; 0060 0061 } 0062 0063 #endif // KPUBLICTRANSPORT_NAVITIAPARSER_H