local function serialize(t, knownTables) assert(type(t) == "table", "Table expected got: " .. type(t)) local knownTables = knownTables or {} local serialized = "" local value for k, v in pairs(t) do local varType, value = type(v) if varType == "string" then value = string.format("%q", v) elseif varType == "number" or varType == "boolean" or varType == "nil" then value = tostring(v) elseif varType == "table" then local t = v for k, v in pairs(knownTables) do if v == t then error("Recursive table") end end table.insert(knownTables, v) value = serialize(v, knownTables) end if value then local prefix = serialized == "" and "" or ", " local key = "" if not (type(k) == "number" and k <= #t) then key = (type(k) == "number" and "[" .. k .. "]" or k) .. " = " end serialized = serialized .. prefix .. key .. value end end return "{" .. serialized .. "}" end