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

0001 /*
0002     SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KPUBLICTRANSPORT_HAFASPARSER_H
0008 #define KPUBLICTRANSPORT_HAFASPARSER_H
0009 
0010 #include "hafasbackend.h"
0011 #include "kpublictransport_export.h"
0012 
0013 #include <KPublicTransport/Line>
0014 #include <KPublicTransport/Reply>
0015 
0016 #include <QString>
0017 
0018 #include <span>
0019 #include <vector>
0020 
0021 namespace KPublicTransport {
0022 
0023 class Location;
0024 
0025 /** Common base for the various Hafas response parsers.
0026  *  @internal only exported for unit tests
0027  */
0028 class KPUBLICTRANSPORT_EXPORT HafasParser
0029 {
0030 public:
0031     void setLocationIdentifierTypes(const QString &idType, const QString &standardIdType = {});
0032     void setLineModeMap(std::span<HafasLineModeMapEntry> modeMap);
0033     void setStandardLocationIdentfierCountries(std::vector<uint8_t> &&uicCountryCodes);
0034 
0035     Reply::Error error() const;
0036     QString errorMessage() const;
0037 
0038 protected:
0039     HafasParser();
0040     ~HafasParser();
0041 
0042     void clearErrorState();
0043     Line::Mode parseLineMode(const QString &modeId) const;
0044     Line::Mode parseLineMode(const QStringView &modeId) const;
0045     Line::Mode parseLineMode(int modeId) const;
0046 
0047     void setLocationIdentifier(Location &loc, const QString &id) const;
0048 
0049 protected:
0050     mutable QString m_errorMsg;
0051     mutable Reply::Error m_error = Reply::NoError;
0052 
0053 private:
0054     Q_DISABLE_COPY(HafasParser)
0055 
0056     QString m_locationIdentifierType;
0057     QString m_standardLocationIdentifierType;
0058     std::span<HafasLineModeMapEntry> m_lineModeMap;
0059     std::vector<uint8_t> m_uicCountryCodes;
0060 };
0061 
0062 }
0063 
0064 #endif // KPUBLICTRANSPORT_HAFASPARSER_H