aboutsummaryrefslogtreecommitdiffstats
path: root/util/serialization.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2010-12-12 06:29:19 +0500
committerWaqas Hussain <waqas20@gmail.com>2010-12-12 06:29:19 +0500
commit31cd341b7da2df0966ea76d04f67eeb410a3b5cb (patch)
tree1e7814a39e13272b399d2bca2581a1572d8943c2 /util/serialization.lua
parent0c43b50b88d382a49dfec55b2f5cbe5fa673077a (diff)
downloadprosody-31cd341b7da2df0966ea76d04f67eeb410a3b5cb.tar.gz
prosody-31cd341b7da2df0966ea76d04f67eeb410a3b5cb.zip
util.serialization: Implemented deserialize().
Diffstat (limited to 'util/serialization.lua')
-rw-r--r--util/serialization.lua13
1 files changed, 12 insertions, 1 deletions
diff --git a/util/serialization.lua b/util/serialization.lua
index bad2fe43..474b5d65 100644
--- a/util/serialization.lua
+++ b/util/serialization.lua
@@ -15,6 +15,10 @@ local error = error;
local pairs = pairs;
local next = next;
+local loadstring = loadstring;
+local setfenv = setfenv;
+local pcall = pcall;
+
local debug_traceback = debug.traceback;
local log = require "util.logger".init("serialization");
module "serialization"
@@ -72,7 +76,14 @@ function serialize(o)
end
function deserialize(str)
- error("Not implemented");
+ if type(str) ~= "string" then return nil; end
+ str = "return "..str;
+ local f, err = loadstring(str, "@data");
+ if not f then return nil, err; end
+ setfenv(f, {});
+ local success, ret = pcall(f);
+ if not success then return nil, ret; end
+ return ret;
end
return _M;