diff --git a/src/Lib/JsonBuilder.cc b/src/Lib/JsonBuilder.cc new file mode 100644 index 0000000000000000000000000000000000000000..105445ea825b94a0a6abac131139ea2621f38ffa --- /dev/null +++ b/src/Lib/JsonBuilder.cc @@ -0,0 +1,25 @@ +#include "JsonBuilder.hh" + +using namespace Vivy; + +QJsonArray +JsonBuilder::createOrderedJsonObject( + std::initializer_list<QPair<QString, QJsonValue>> elements) noexcept +{ + QJsonArray ret; + int index = 0; + + for (const QPair<QString, QJsonValue> &elem : elements) { + ret.insert(index, QJsonObject({ elem })); + ++index; + } + + return ret; +} + +QJsonDocument +JsonBuilder::createOrderedJsonDocument( + std::initializer_list<QPair<QString, QJsonValue>> elements) noexcept +{ + return QJsonDocument(createOrderedJsonObject(elements)); +} diff --git a/src/Lib/JsonBuilder.hh b/src/Lib/JsonBuilder.hh new file mode 100644 index 0000000000000000000000000000000000000000..4534b46381f19e29a24b084c3771c32b46f13adf --- /dev/null +++ b/src/Lib/JsonBuilder.hh @@ -0,0 +1,31 @@ +#pragma once + +#include "Utils.hh" + +namespace Vivy +{ +// Struct used to englobe all json build facilities. This is a class used as a +// private-able namespace that can't be 'using' and thus create unreadable +// code. You can't build this thing, everything is static inside. +struct JsonBuilder final { + VIVY_UNMOVABLE_OBJECT(JsonBuilder) + + static QJsonArray + createOrderedJsonObject(std::initializer_list<QPair<QString, QJsonValue>> elements) noexcept; + + static QJsonDocument + createOrderedJsonDocument(std::initializer_list<QPair<QString, QJsonValue>> elements) noexcept; + + template <PropertyConstViewable T> static QPair<QString, QJsonValue> + getSubDocumentJson(const QString &name, std::shared_ptr<T> subDocPtr) noexcept + { + if (subDocPtr == nullptr) + return QPair{ name, QJsonValue() }; + else + return QPair{ name, subDocPtr->getProperties().object() }; + } + +private: + JsonBuilder() noexcept {} +}; +}