Software / code / prosody
Comparison
util/serialization.lua @ 2148:5590c13552ab
util.serialization: Concise output for empty tables.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Mon, 23 Nov 2009 19:35:24 +0500 |
| parent | 1523:841d61be198f |
| child | 2149:603134825bdb |
comparison
equal
deleted
inserted
replaced
| 2147:119323e35c32 | 2148:5590c13552ab |
|---|---|
| 11 local tostring = tostring; | 11 local tostring = tostring; |
| 12 local t_insert = table.insert; | 12 local t_insert = table.insert; |
| 13 local t_concat = table.concat; | 13 local t_concat = table.concat; |
| 14 local error = error; | 14 local error = error; |
| 15 local pairs = pairs; | 15 local pairs = pairs; |
| 16 local next = next; | |
| 16 | 17 |
| 17 local debug_traceback = debug.traceback; | 18 local debug_traceback = debug.traceback; |
| 18 local log = require "util.logger".init("serialization"); | 19 local log = require "util.logger".init("serialization"); |
| 19 module "serialization" | 20 module "serialization" |
| 20 | 21 |
| 32 if type(o) == "number" then | 33 if type(o) == "number" then |
| 33 func(t, tostring(o)); | 34 func(t, tostring(o)); |
| 34 elseif type(o) == "string" then | 35 elseif type(o) == "string" then |
| 35 func(t, (("%q"):format(o):gsub("\\\n", "\\n"))); | 36 func(t, (("%q"):format(o):gsub("\\\n", "\\n"))); |
| 36 elseif type(o) == "table" then | 37 elseif type(o) == "table" then |
| 37 func(t, "{\n"); | 38 if next(o) then |
| 38 for k,v in pairs(o) do | 39 func(t, "{\n"); |
| 39 func(t, indent(ind)); | 40 for k,v in pairs(o) do |
| 40 func(t, "["); | 41 func(t, indent(ind)); |
| 41 func(t, basicSerialize(k)); | 42 func(t, "["); |
| 42 func(t, "] = "); | 43 func(t, basicSerialize(k)); |
| 43 if ind == 0 then | 44 func(t, "] = "); |
| 44 _simplesave(v, 0, t, func); | 45 if ind == 0 then |
| 45 else | 46 _simplesave(v, 0, t, func); |
| 46 _simplesave(v, ind+1, t, func); | 47 else |
| 48 _simplesave(v, ind+1, t, func); | |
| 49 end | |
| 50 func(t, ",\n"); | |
| 47 end | 51 end |
| 48 func(t, ",\n"); | 52 func(t, indent(ind-1)); |
| 53 func(t, "}"); | |
| 54 else | |
| 55 func(t, "{}"); | |
| 49 end | 56 end |
| 50 func(t, indent(ind-1)); | |
| 51 func(t, "}"); | |
| 52 elseif type(o) == "boolean" then | 57 elseif type(o) == "boolean" then |
| 53 func(t, (o and "true" or "false")); | 58 func(t, (o and "true" or "false")); |
| 54 else | 59 else |
| 55 log("error", "cannot serialize a %s: %s", type(o), debug_traceback()) | 60 log("error", "cannot serialize a %s: %s", type(o), debug_traceback()) |
| 56 func(t, "nil"); | 61 func(t, "nil"); |