diff options
author | Waqas Hussain <waqas20@gmail.com> | 2010-12-12 06:29:19 +0500 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2010-12-12 06:29:19 +0500 |
commit | 31cd341b7da2df0966ea76d04f67eeb410a3b5cb (patch) | |
tree | 1e7814a39e13272b399d2bca2581a1572d8943c2 /util/serialization.lua | |
parent | 0c43b50b88d382a49dfec55b2f5cbe5fa673077a (diff) | |
download | prosody-31cd341b7da2df0966ea76d04f67eeb410a3b5cb.tar.gz prosody-31cd341b7da2df0966ea76d04f67eeb410a3b5cb.zip |
util.serialization: Implemented deserialize().
Diffstat (limited to 'util/serialization.lua')
-rw-r--r-- | util/serialization.lua | 13 |
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; |