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 }