local function serialize(t, knownTables) assert(type(t) == "table", "Table expected got: " .. type(t)) local serialized = "" local knownTables = knownTables or {} 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 isRecursive = false local t = v for k, v in pairs(knownTables) do if v == t then isRecursive = true break end end if not isRecursive then table.insert(knownTables, v) value = serialize(v, knownTables) else error("Recursive table") end end if value then local append = (serialized == "" and "" or ", ") .. (type(k) == "number" and k <= #t and "" or ("[" .. (type(k) == "number" and k or string.format("%q", k)) .. "]") .. " = ") .. value serialized = serialized .. append end end return "{" .. serialized .. "}" end