Skip to content

Commit 4b95331

Browse files
committed
don't strip metatables with json_encodable
1 parent d207008 commit 4b95331

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

lapis/util.lua

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,13 +249,23 @@ json_encodable = function(obj, seen)
249249
if "table" == _exp_0 then
250250
if not (seen[obj]) then
251251
seen[obj] = true
252-
local _tbl_0 = { }
253-
for k, v in pairs(obj) do
254-
if type(k) == "string" or type(k) == "number" then
255-
_tbl_0[k] = json_encodable(v)
252+
local o
253+
do
254+
local _tbl_0 = { }
255+
for k, v in pairs(obj) do
256+
if type(k) == "string" or type(k) == "number" then
257+
_tbl_0[k] = json_encodable(v)
258+
end
259+
end
260+
o = _tbl_0
261+
end
262+
do
263+
local mt = getmetatable(obj)
264+
if mt then
265+
setmetatable(o, mt)
256266
end
257267
end
258-
return _tbl_0
268+
return o
259269
end
260270
elseif "userdata" == _exp_0 then
261271
return encodable_userdata[obj] and obj

lapis/util.moon

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,13 @@ json_encodable = (obj, seen={}) ->
211211
when "table"
212212
unless seen[obj]
213213
seen[obj] = true
214-
{ k, json_encodable(v) for k,v in pairs(obj) when type(k) == "string" or type(k) == "number" }
214+
o = { k, json_encodable(v) for k,v in pairs(obj) when type(k) == "string" or type(k) == "number" }
215+
216+
-- keep metatables, like cjson.array_mt
217+
if mt = getmetatable obj
218+
setmetatable o, mt
219+
220+
o
215221
when "userdata"
216222
encodable_userdata[obj] and obj
217223
when "function", "thread"

0 commit comments

Comments
 (0)