File indexing completed on 2024-04-14 04:36:48

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <kgraphql.h>
0008 
0009 #include <QCommandLineParser>
0010 #include <QCoreApplication>
0011 #include <QJsonDocument>
0012 #include <QJsonObject>
0013 #include <QNetworkAccessManager>
0014 
0015 #include <iostream>
0016 
0017 #define S(x) QStringLiteral(x)
0018 
0019 int main(int argc, char **argv)
0020 {
0021     QCoreApplication app(argc, argv);
0022     QCommandLineParser parser;
0023     parser.setApplicationDescription(S("graphql-cli"));
0024     parser.addHelpOption();
0025     QCommandLineOption endpointOption({ S("u"), S("url") }, S("GraphQL query endpoint"), S("url"));
0026     parser.addOption(endpointOption);
0027     QCommandLineOption queryOption({ S("q"), S("query") }, S("GraphQL query to run"), S("query-file"));
0028     parser.addOption(queryOption);
0029     QCommandLineOption variableOption({ S("v"), S("variable") }, S("GraphQL variable"), S("variable=value"));
0030     parser.addOption(variableOption);
0031     parser.process(app);
0032 
0033     QNetworkAccessManager nam;
0034     nam.setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
0035 
0036     KGraphQLRequest req(QUrl(parser.value(endpointOption)));
0037     req.setQueryFromFile(parser.value(queryOption));
0038 
0039     for (const auto &var : parser.values(variableOption)) {
0040         const auto split = var.split(QLatin1Char('='));
0041         if (split.size() != 2) {
0042             continue;
0043         }
0044 
0045         bool ok = false;
0046         float num = split[1].toFloat(&ok);
0047         if (ok) {
0048             req.setVariable(split[0], num);
0049         } else {
0050             req.setVariable(split[0], split[1]);
0051         }
0052     }
0053 
0054     KGraphQL::query(req, &nam, [&app](const KGraphQLReply &reply) {
0055         switch (reply.error()) {
0056             case KGraphQLReply::NoError:
0057                 std::cout << QJsonDocument(reply.data()).toJson().constData() << std::endl;
0058                 break;
0059             case KGraphQLReply::NetworkError:
0060                 std::cerr << "Network error: " << qPrintable(reply.errorString()) << std::endl;
0061                 break;
0062             case KGraphQLReply::QueryError:
0063                 std::cerr << "Query error: " << qPrintable(reply.errorString()) << std::endl;
0064                 break;
0065         }
0066         app.quit();
0067     });
0068 
0069     return app.exec();
0070 }