aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;