aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarcus Tillmanns <[email protected]>2024-07-24 08:13:09 +0200
committerMarcus Tillmanns <[email protected]>2024-07-24 10:43:57 +0000
commitdf583b2cd07f114bf91693862bedb522b051a732 (patch)
treeee349d90faa564704318cb9e32c46ae4f3c49f46 /src
parentd0fe8ac061f7fa141fa47f2121b28d42762cec67 (diff)
Lua: Add to/from json convenience functions
Change-Id: Ibf69c8021d676bd6efbbdb5331f1925808fcfe38 Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/lua/bindings/fetch.cpp10
-rw-r--r--src/plugins/lua/bindings/json.cpp20
-rw-r--r--src/plugins/lua/luaengine.cpp20
-rw-r--r--src/plugins/lua/luaengine.h3
4 files changed, 27 insertions, 26 deletions
diff --git a/src/plugins/lua/bindings/fetch.cpp b/src/plugins/lua/bindings/fetch.cpp
index 6f5fd535612..f998db4f536 100644
--- a/src/plugins/lua/bindings/fetch.cpp
+++ b/src/plugins/lua/bindings/fetch.cpp
@@ -288,14 +288,8 @@ void addFetchModule()
callback(error.errorString());
return;
}
- if (doc.isObject()) {
- callback(LuaEngine::toTable(thisState, doc.object()));
- } else if (doc.isArray()) {
- callback(LuaEngine::toTable(thisState, doc.array()));
- } else {
- sol::state_view lua(thisState);
- callback(lua.create_table());
- }
+
+ callback(LuaEngine::toTable(thisState, doc));
});
} else {
diff --git a/src/plugins/lua/bindings/json.cpp b/src/plugins/lua/bindings/json.cpp
index 1ef45c33650..04fbe938938 100644
--- a/src/plugins/lua/bindings/json.cpp
+++ b/src/plugins/lua/bindings/json.cpp
@@ -11,18 +11,7 @@ void addJsonModule()
{
LuaEngine::registerProvider("Json", [](sol::state_view lua) -> sol::object {
sol::table json = lua.create_table();
- json["encode"] = [](const sol::table &tbl) -> QString {
- QJsonValue value = LuaEngine::toJson(tbl);
- QJsonDocument doc;
- if (value.isObject())
- doc.setObject(value.toObject());
- else if (value.isArray())
- doc.setArray(value.toArray());
- else
- return QString();
-
- return QString::fromUtf8(doc.toJson());
- };
+ json["encode"] = &LuaEngine::toJsonString;
json["decode"] = [](sol::this_state l, const QString &str) -> sol::table {
QJsonParseError error;
@@ -30,12 +19,7 @@ void addJsonModule()
if (error.error != QJsonParseError::NoError)
throw sol::error(error.errorString().toStdString());
- if (doc.isObject())
- return LuaEngine::toTable(l.lua_state(), doc.object());
- else if (doc.isArray())
- return LuaEngine::toTable(l.lua_state(), doc.array());
-
- return sol::table();
+ return LuaEngine::toTable(l.lua_state(), doc);
};
return json;
diff --git a/src/plugins/lua/luaengine.cpp b/src/plugins/lua/luaengine.cpp
index 2b921f900d4..d09e7b97af5 100644
--- a/src/plugins/lua/luaengine.cpp
+++ b/src/plugins/lua/luaengine.cpp
@@ -15,6 +15,7 @@
#include <utils/theme/theme.h>
#include <QJsonArray>
+#include <QJsonDocument>
#include <QJsonObject>
#include <QStandardPaths>
@@ -348,6 +349,15 @@ sol::table LuaEngine::toTable(const sol::state_view &lua, const QJsonValue &v)
return table;
}
+sol::table LuaEngine::toTable(const sol::state_view &lua, const QJsonDocument &doc)
+{
+ if (doc.isArray())
+ return toTable(lua, doc.array());
+ else if (doc.isObject())
+ return toTable(lua, doc.object());
+ return sol::table();
+}
+
QJsonValue toJsonValue(const sol::object &object);
QJsonValue toJsonValue(const sol::table &table)
@@ -397,6 +407,16 @@ QJsonValue LuaEngine::toJson(const sol::table &table)
return toJsonValue(table);
}
+QString LuaEngine::toJsonString(const sol::table &t)
+{
+ QJsonValue v = toJson(t);
+ if (v.isArray())
+ return QString::fromUtf8(QJsonDocument(v.toArray()).toJson(QJsonDocument::Compact));
+ else if (v.isObject())
+ return QString::fromUtf8(QJsonDocument(v.toObject()).toJson(QJsonDocument::Compact));
+ return {};
+}
+
QStringList LuaEngine::variadicToStringList(const sol::variadic_args &vargs)
{
QStringList strings;
diff --git a/src/plugins/lua/luaengine.h b/src/plugins/lua/luaengine.h
index 9bd4d366bce..44e1cfe4210 100644
--- a/src/plugins/lua/luaengine.h
+++ b/src/plugins/lua/luaengine.h
@@ -66,7 +66,10 @@ public:
static bool isCoroutine(lua_State *state);
static sol::table toTable(const sol::state_view &lua, const QJsonValue &v);
+ static sol::table toTable(const sol::state_view &lua, const QJsonDocument &doc);
+
static QJsonValue toJson(const sol::table &t);
+ static QString toJsonString(const sol::table &t);
template<class T>
static void checkKey(const sol::table &table, const QString &key)