local config = {} config.format = function(t) assert(type(t) == "table", "Table expected got: " .. type(t)) local knownTables = knownTables or {} local serialized = "" local depth = depth or 1 local whitespace = string.rep(" ", depth * 4) for k, v in pairs(t) do local varType = type(v) local value = "" if varType == "string" then value = string.format("%q", v) elseif varType == "number" or varType == "boolean" 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, depth + 1) end if value then local prefix = serialized == "" and "" or ", " key = (type(k) == "number" and ("[" .. k .. "]") or k) .. " = " serialized = serialized .. prefix .. "\n" .. whitespace .. key .. value end end return "{" .. serialized .. "\n" .. string.rep(" ", (depth - 1) * 4) .. "}" end return config