Diff

util/serialization.lua @ 3736:73399dd525e8

util.serialization: Implemented deserialize().
author Waqas Hussain <waqas20@gmail.com>
date Sun, 12 Dec 2010 06:29:19 +0500
parent 2923:b7049746bd29
child 3745:87f6eabd90c9
line wrap: on
line diff
--- a/util/serialization.lua	Sun Dec 12 06:25:54 2010 +0500
+++ b/util/serialization.lua	Sun Dec 12 06:29:19 2010 +0500
@@ -15,6 +15,10 @@
 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 @@
 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;