diff --git a/code/serialize.lua b/code/serialize.lua new file mode 100644 index 0000000..b166a99 --- /dev/null +++ b/code/serialize.lua @@ -0,0 +1,31 @@ +local function quote(str, lvl) + --lvl = lvl or + local rp = "]"..(lvl or "").."]" + if string.match(str, rp) then + return quote(str, (lvl or "") .. "=") + end + + return "["..(lvl or "").."["..str..rp +end + +function serialize_lua_value(val) + if type(val) == "number" then + return tostring(val) + elseif type(val) == "string" then + -- TODO: use different quotes if ']]' appears in the value + return quote(val) + elseif type(val) == "table" then + local r = "{" + for k, v in pairs(val) do + r = r .. "[ "..serialize_lua_value(k).." ]="..serialize_lua_value(v).."," + end + return r .. "}" + elseif val == nil then + return "nil" + elseif val == false then + return "false" + elseif val == true then + return "true" + end + error("serialization failed") +end