diff options
author | gpcf <gpcf@gpcf.eu> | 2024-07-27 23:23:39 +0200 |
---|---|---|
committer | gpcf <gpcf@gpcf.eu> | 2024-07-27 23:23:39 +0200 |
commit | 8d9fe6845ecd8a14de2c973547d3ae98107d635f (patch) | |
tree | f13b4d0ac285d660b129e1ea8cd5c818e57f76ee /serialize.lua | |
parent | 9340e2441c778ce5ba20ad3d7fe56e771560cbbd (diff) | |
parent | e870b8d1d6963c762e980a3cccfd5effdec61df9 (diff) | |
download | xban2-8d9fe6845ecd8a14de2c973547d3ae98107d635f.tar.gz xban2-8d9fe6845ecd8a14de2c973547d3ae98107d635f.tar.bz2 xban2-8d9fe6845ecd8a14de2c973547d3ae98107d635f.zip |
Merge branch 'master' of https://github.com/minetest-mods/xban2
Diffstat (limited to 'serialize.lua')
-rw-r--r-- | serialize.lua | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/serialize.lua b/serialize.lua index c159141..0a54212 100644 --- a/serialize.lua +++ b/serialize.lua @@ -27,5 +27,44 @@ local function my_serialize_2(t, level) end function xban.serialize(t) + minetest.log("warning", "[xban2] xban.serialize() is deprecated") return "return {\n"..my_serialize_2(t, 1).."\n}" end + +-- JSON doesn't allow combined string+number keys, this function moves any +-- number keys into an "entries" table +function xban.serialize_db(t) + local res = {} + local entries = {} + for k, v in pairs(t) do + if type(k) == "number" then + entries[k] = v + else + res[k] = v + end + end + res.entries = entries + return minetest.write_json(res, true) +end + +function xban.deserialize_db(s) + if s:sub(1, 1) ~= "{" then + -- Load legacy databases + return minetest.deserialize(s) + end + + local res, err = minetest.parse_json(s) + if not res then + return nil, err + end + + -- Remove all "null"s added by empty tables + for i, entry in ipairs(res.entries or {}) do + entry.names = entry.names or {} + entry.record = entry.record or {} + res[i] = entry + end + res.entries = nil + + return res +end |