aboutsummaryrefslogtreecommitdiffstats
path: root/util
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
commit25f970cc60cf9f881a9b37b6c922d054d35d085d (patch)
tree9b7a8959a2bdddf6e990f3508f746d596fe6696d /util
parentc3e87cc5f3a4893510bd5b42bcd4856dae44227d (diff)
downloadprosody-25f970cc60cf9f881a9b37b6c922d054d35d085d.tar.gz
prosody-25f970cc60cf9f881a9b37b6c922d054d35d085d.zip
util.serialization: Implemented deserialize().
Diffstat (limited to 'util')
-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;