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