diff options
author | Trial97 <alexandru.tripon97@gmail.com> | 2023-08-15 12:16:00 +0300 |
---|---|---|
committer | Trial97 <alexandru.tripon97@gmail.com> | 2023-08-15 12:16:00 +0300 |
commit | c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5 (patch) | |
tree | 437dec3be224cae5e229eeaa4ac9ebeedffd03e3 /launcher/Json.h | |
parent | 019e5ca3e819f5daf9933bc0fb091784b0ca561f (diff) | |
parent | 8f5bb982cd27dd9158b63d826769c168455a139b (diff) | |
download | PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.gz PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.bz2 PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.zip |
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLauncher into curseforge-url-handle3
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
Diffstat (limited to 'launcher/Json.h')
-rw-r--r-- | launcher/Json.h | 202 |
1 files changed, 102 insertions, 100 deletions
diff --git a/launcher/Json.h b/launcher/Json.h index b11a356c..28891f39 100644 --- a/launcher/Json.h +++ b/launcher/Json.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> * * This program is free software: you can redistribute it and/or modify @@ -35,74 +35,71 @@ #pragma once -#include <QJsonDocument> +#include <QDateTime> +#include <QDir> #include <QJsonArray> +#include <QJsonDocument> #include <QJsonObject> -#include <QDateTime> #include <QUrl> -#include <QDir> #include <QUuid> #include <QVariant> #include <memory> #include "Exception.h" -namespace Json -{ -class JsonException : public ::Exception -{ -public: - JsonException(const QString &message) : Exception(message) {} +namespace Json { +class JsonException : public ::Exception { + public: + JsonException(const QString& message) : Exception(message) {} }; /// @throw FileSystemException -void write(const QJsonDocument &doc, const QString &filename); +void write(const QJsonDocument& doc, const QString& filename); /// @throw FileSystemException -void write(const QJsonObject &object, const QString &filename); +void write(const QJsonObject& object, const QString& filename); /// @throw FileSystemException -void write(const QJsonArray &array, const QString &filename); +void write(const QJsonArray& array, const QString& filename); -QByteArray toText(const QJsonObject &obj); -QByteArray toText(const QJsonArray &array); +QByteArray toText(const QJsonObject& obj); +QByteArray toText(const QJsonArray& array); /// @throw JsonException -QJsonDocument requireDocument(const QByteArray &data, const QString &what = "Document"); +QJsonDocument requireDocument(const QByteArray& data, const QString& what = "Document"); /// @throw JsonException -QJsonDocument requireDocument(const QString &filename, const QString &what = "Document"); +QJsonDocument requireDocument(const QString& filename, const QString& what = "Document"); /// @throw JsonException -QJsonObject requireObject(const QJsonDocument &doc, const QString &what = "Document"); +QJsonObject requireObject(const QJsonDocument& doc, const QString& what = "Document"); /// @throw JsonException -QJsonArray requireArray(const QJsonDocument &doc, const QString &what = "Document"); +QJsonArray requireArray(const QJsonDocument& doc, const QString& what = "Document"); /////////////////// WRITING //////////////////// -void writeString(QJsonObject & to, const QString &key, const QString &value); -void writeStringList(QJsonObject & to, const QString &key, const QStringList &values); +void writeString(QJsonObject& to, const QString& key, const QString& value); +void writeStringList(QJsonObject& to, const QString& key, const QStringList& values); -template<typename T> -QJsonValue toJson(const T &t) +template <typename T> +QJsonValue toJson(const T& t) { return QJsonValue(t); } -template<> -QJsonValue toJson<QUrl>(const QUrl &url); -template<> -QJsonValue toJson<QByteArray>(const QByteArray &data); -template<> -QJsonValue toJson<QDateTime>(const QDateTime &datetime); -template<> -QJsonValue toJson<QDir>(const QDir &dir); -template<> -QJsonValue toJson<QUuid>(const QUuid &uuid); -template<> -QJsonValue toJson<QVariant>(const QVariant &variant); +template <> +QJsonValue toJson<QUrl>(const QUrl& url); +template <> +QJsonValue toJson<QByteArray>(const QByteArray& data); +template <> +QJsonValue toJson<QDateTime>(const QDateTime& datetime); +template <> +QJsonValue toJson<QDir>(const QDir& dir); +template <> +QJsonValue toJson<QUuid>(const QUuid& uuid); +template <> +QJsonValue toJson<QVariant>(const QVariant& variant); -template<typename T> -QJsonArray toJsonArray(const QList<T> &container) +template <typename T> +QJsonArray toJsonArray(const QList<T>& container) { QJsonArray array; - for (const T item : container) - { + for (const T item : container) { array.append(toJson<T>(item)); } return array; @@ -112,106 +109,110 @@ QJsonArray toJsonArray(const QList<T> &container) /// @throw JsonException template <typename T> -T requireIsType(const QJsonValue &value, const QString &what = "Value"); +T requireIsType(const QJsonValue& value, const QString& what = "Value"); /// @throw JsonException -template<> double requireIsType<double>(const QJsonValue &value, const QString &what); +template <> +double requireIsType<double>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> bool requireIsType<bool>(const QJsonValue &value, const QString &what); +template <> +bool requireIsType<bool>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> int requireIsType<int>(const QJsonValue &value, const QString &what); +template <> +int requireIsType<int>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QJsonObject requireIsType<QJsonObject>(const QJsonValue &value, const QString &what); +template <> +QJsonObject requireIsType<QJsonObject>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QJsonArray requireIsType<QJsonArray>(const QJsonValue &value, const QString &what); +template <> +QJsonArray requireIsType<QJsonArray>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QJsonValue requireIsType<QJsonValue>(const QJsonValue &value, const QString &what); +template <> +QJsonValue requireIsType<QJsonValue>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QByteArray requireIsType<QByteArray>(const QJsonValue &value, const QString &what); +template <> +QByteArray requireIsType<QByteArray>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QDateTime requireIsType<QDateTime>(const QJsonValue &value, const QString &what); +template <> +QDateTime requireIsType<QDateTime>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QVariant requireIsType<QVariant>(const QJsonValue &value, const QString &what); +template <> +QVariant requireIsType<QVariant>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QString requireIsType<QString>(const QJsonValue &value, const QString &what); +template <> +QString requireIsType<QString>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QUuid requireIsType<QUuid>(const QJsonValue &value, const QString &what); +template <> +QUuid requireIsType<QUuid>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QDir requireIsType<QDir>(const QJsonValue &value, const QString &what); +template <> +QDir requireIsType<QDir>(const QJsonValue& value, const QString& what); /// @throw JsonException -template<> QUrl requireIsType<QUrl>(const QJsonValue &value, const QString &what); +template <> +QUrl requireIsType<QUrl>(const QJsonValue& value, const QString& what); // the following functions are higher level functions, that make use of the above functions for // type conversion template <typename T> -T ensureIsType(const QJsonValue &value, const T default_ = T(), const QString &what = "Value") +T ensureIsType(const QJsonValue& value, const T default_ = T(), const QString& what = "Value") { - if (value.isUndefined() || value.isNull()) - { + if (value.isUndefined() || value.isNull()) { return default_; } - try - { + try { return requireIsType<T>(value, what); - } - catch (const JsonException &) - { + } catch (const JsonException&) { return default_; } } /// @throw JsonException template <typename T> -T requireIsType(const QJsonObject &parent, const QString &key, const QString &what = "__placeholder__") +T requireIsType(const QJsonObject& parent, const QString& key, const QString& what = "__placeholder__") { const QString localWhat = QString(what).replace("__placeholder__", '\'' + key + '\''); - if (!parent.contains(key)) - { + if (!parent.contains(key)) { throw JsonException(localWhat + "s parent does not contain " + localWhat); } return requireIsType<T>(parent.value(key), localWhat); } template <typename T> -T ensureIsType(const QJsonObject &parent, const QString &key, const T default_ = T(), const QString &what = "__placeholder__") +T ensureIsType(const QJsonObject& parent, const QString& key, const T default_ = T(), const QString& what = "__placeholder__") { const QString localWhat = QString(what).replace("__placeholder__", '\'' + key + '\''); - if (!parent.contains(key)) - { + if (!parent.contains(key)) { return default_; } return ensureIsType<T>(parent.value(key), default_, localWhat); } template <typename T> -QVector<T> requireIsArrayOf(const QJsonDocument &doc) +QVector<T> requireIsArrayOf(const QJsonDocument& doc) { const QJsonArray array = requireArray(doc); QVector<T> out; - for (const QJsonValue val : array) - { + for (const QJsonValue val : array) { out.append(requireIsType<T>(val, "Document")); } return out; } template <typename T> -QVector<T> ensureIsArrayOf(const QJsonValue &value, const QString &what = "Value") +QVector<T> ensureIsArrayOf(const QJsonValue& value, const QString& what = "Value") { const QJsonArray array = ensureIsType<QJsonArray>(value, QJsonArray(), what); QVector<T> out; - for (const QJsonValue val : array) - { + for (const QJsonValue val : array) { out.append(requireIsType<T>(val, what)); } return out; } template <typename T> -QVector<T> ensureIsArrayOf(const QJsonValue &value, const QVector<T> default_, const QString &what = "Value") +QVector<T> ensureIsArrayOf(const QJsonValue& value, const QVector<T> default_, const QString& what = "Value") { - if (value.isUndefined()) - { + if (value.isUndefined()) { return default_; } return ensureIsArrayOf<T>(value, what); @@ -219,45 +220,46 @@ QVector<T> ensureIsArrayOf(const QJsonValue &value, const QVector<T> default_, c /// @throw JsonException template <typename T> -QVector<T> requireIsArrayOf(const QJsonObject &parent, const QString &key, const QString &what = "__placeholder__") +QVector<T> requireIsArrayOf(const QJsonObject& parent, const QString& key, const QString& what = "__placeholder__") { const QString localWhat = QString(what).replace("__placeholder__", '\'' + key + '\''); - if (!parent.contains(key)) - { + if (!parent.contains(key)) { throw JsonException(localWhat + "s parent does not contain " + localWhat); } return ensureIsArrayOf<T>(parent.value(key), localWhat); } template <typename T> -QVector<T> ensureIsArrayOf(const QJsonObject &parent, const QString &key, - const QVector<T> &default_ = QVector<T>(), const QString &what = "__placeholder__") +QVector<T> ensureIsArrayOf(const QJsonObject& parent, + const QString& key, + const QVector<T>& default_ = QVector<T>(), + const QString& what = "__placeholder__") { const QString localWhat = QString(what).replace("__placeholder__", '\'' + key + '\''); - if (!parent.contains(key)) - { + if (!parent.contains(key)) { return default_; } return ensureIsArrayOf<T>(parent.value(key), default_, localWhat); } // this macro part could be replaced by variadic functions that just pass on their arguments, but that wouldn't work well with IDE helpers -#define JSON_HELPERFUNCTIONS(NAME, TYPE) \ - inline TYPE require##NAME(const QJsonValue &value, const QString &what = "Value") \ - { \ - return requireIsType<TYPE>(value, what); \ - } \ - inline TYPE ensure##NAME(const QJsonValue &value, const TYPE default_ = TYPE(), const QString &what = "Value") \ - { \ - return ensureIsType<TYPE>(value, default_, what); \ - } \ - inline TYPE require##NAME(const QJsonObject &parent, const QString &key, const QString &what = "__placeholder__") \ - { \ - return requireIsType<TYPE>(parent, key, what); \ - } \ - inline TYPE ensure##NAME(const QJsonObject &parent, const QString &key, const TYPE default_ = TYPE(), const QString &what = "__placeholder") \ - { \ - return ensureIsType<TYPE>(parent, key, default_, what); \ +#define JSON_HELPERFUNCTIONS(NAME, TYPE) \ + inline TYPE require##NAME(const QJsonValue& value, const QString& what = "Value") \ + { \ + return requireIsType<TYPE>(value, what); \ + } \ + inline TYPE ensure##NAME(const QJsonValue& value, const TYPE default_ = TYPE(), const QString& what = "Value") \ + { \ + return ensureIsType<TYPE>(value, default_, what); \ + } \ + inline TYPE require##NAME(const QJsonObject& parent, const QString& key, const QString& what = "__placeholder__") \ + { \ + return requireIsType<TYPE>(parent, key, what); \ + } \ + inline TYPE ensure##NAME(const QJsonObject& parent, const QString& key, const TYPE default_ = TYPE(), \ + const QString& what = "__placeholder") \ + { \ + return ensureIsType<TYPE>(parent, key, default_, what); \ } JSON_HELPERFUNCTIONS(Array, QJsonArray) @@ -276,5 +278,5 @@ JSON_HELPERFUNCTIONS(Variant, QVariant) #undef JSON_HELPERFUNCTIONS -} +} // namespace Json using JSONValidationError = Json::JsonException; |