File indexing completed on 2024-05-19 04:41:20

0001 /*
0002     SPDX-FileCopyrightText: 2019 Daniel Mensinger <daniel@mensinger-ka.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "mesonkwargsinfo.h"
0008 #include "debug.h"
0009 
0010 #include <QJsonArray>
0011 
0012 MesonKWARGSInfo::MesonKWARGSInfo(MesonKWARGSInfo::Function fn, const QString& id)
0013     : m_func(fn)
0014     , m_id(id)
0015 {
0016 }
0017 
0018 QJsonObject MesonKWARGSInfo::command()
0019 {
0020     QJsonObject res;
0021 
0022     auto func2str = [](Function fn) -> QString {
0023         switch (fn) {
0024         case PROJECT:
0025             return QStringLiteral("project");
0026         case TARGET:
0027             return QStringLiteral("target");
0028         case DEPENDENCY:
0029             return QStringLiteral("dependency");
0030         }
0031 
0032         return QStringLiteral("ERROR");
0033     };
0034 
0035     res[QStringLiteral("type")] = QStringLiteral("kwargs");
0036     res[QStringLiteral("function")] = func2str(m_func);
0037     res[QStringLiteral("id")] = m_id;
0038     res[QStringLiteral("operation")] = QStringLiteral("info");
0039 
0040     m_infoID = func2str(m_func) + QLatin1Char('#') + m_id;
0041 
0042     return res;
0043 }
0044 
0045 void MesonKWARGSInfo::parseResult(QJsonObject data)
0046 {
0047     if (!data[QStringLiteral("kwargs")].isObject()) {
0048         qCWarning(KDEV_Meson) << "REWRITR: Failed to parse rewriter result";
0049         return;
0050     }
0051 
0052     QJsonObject kwargs = data[QStringLiteral("kwargs")].toObject();
0053 
0054     if (!kwargs[m_infoID].isObject()) {
0055         qCWarning(KDEV_Meson) << "REWRITR: Failed to extract info data from object";
0056         return;
0057     }
0058 
0059     m_result = kwargs[m_infoID].toObject();
0060 }
0061 
0062 MesonKWARGSInfo::Function MesonKWARGSInfo::function() const
0063 {
0064     return m_func;
0065 }
0066 
0067 QString MesonKWARGSInfo::id() const
0068 {
0069     return m_id;
0070 }
0071 
0072 bool MesonKWARGSInfo::hasKWARG(const QString& kwarg) const
0073 {
0074     return m_result.contains(kwarg);
0075 }
0076 
0077 QJsonValue MesonKWARGSInfo::get(const QString& kwarg) const
0078 {
0079     if (!hasKWARG(kwarg)) {
0080         return QJsonValue();
0081     }
0082     return m_result[kwarg];
0083 }
0084 
0085 QString MesonKWARGSInfo::getString(const QString& kwarg) const
0086 {
0087     return get(kwarg).toString();
0088 }
0089 
0090 QStringList MesonKWARGSInfo::getArray(const QString& kwarg) const
0091 {
0092     QStringList result;
0093     for (auto i : get(kwarg).toArray()) {
0094         result += i.toString();
0095     }
0096     return result;
0097 }
0098 
0099 // Constructors
0100 
0101 MesonKWARGSProjectInfo::MesonKWARGSProjectInfo()
0102     : MesonKWARGSInfo(PROJECT, QStringLiteral("/"))
0103 {
0104 }
0105 MesonKWARGSTargetInfo::MesonKWARGSTargetInfo(const QString& id)
0106     : MesonKWARGSInfo(TARGET, id)
0107 {
0108 }
0109 MesonKWARGSDependencyInfo::MesonKWARGSDependencyInfo(const QString& id)
0110     : MesonKWARGSInfo(DEPENDENCY, id)
0111 {
0112 }
0113 
0114 // Destructors
0115 
0116 MesonKWARGSInfo::~MesonKWARGSInfo() {}
0117 MesonKWARGSProjectInfo::~MesonKWARGSProjectInfo() {}
0118 MesonKWARGSTargetInfo::~MesonKWARGSTargetInfo() {}
0119 MesonKWARGSDependencyInfo::~MesonKWARGSDependencyInfo() {}