]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/serialisation.lua
Huge Performance improvements
[dragonblocks3d-lua.git] / src / serialisation.lua
1 function Dragonblocks:serialize()
2         local data = "{"
3         for k, v in pairs(self) do
4                 local kdata, vdata
5                 local ktype, vtype = type(k), type(v)
6                 local serialize_pair = true
7                 if ktype == "number" then
8                         kdata = "[" .. k .. "]"
9                 elseif ktype == "string" then
10                         if k:sub(1, 1) == "_" then
11                                 serialize_pair = false
12                         else
13                                 kdata = "[\"" .. k .. "\"]"
14                         end
15                 else
16                         serialize_pair = false
17                 end
18                 if vtype == "table" then
19                         vdata = serializer.serialize(v)
20                 elseif vtype == "string" then
21                         vdata = "\"" .. v .. "\""
22                 elseif vtype == "number" then
23                         vdata = v
24                 elseif vtype == "boolean" then
25                         vdata = v and "true" or "false"
26                 elseif vtype == "function" then
27                         vdata = tostring(v)
28                 else
29                         serialize_pair = false
30                 end
31                 if serialize_pair then
32                         data = data .. kdata .. "=" .. vdata .. ","
33                 end
34         end
35         return data .. "}"
36 end
37
38 function Dragonblocks:deserialize(raw)
39         if not raw then
40                 raw = self
41                 self = {}
42         end
43         raw = "return" .. raw
44         local f = loadstring(raw)
45         local data = f and f()
46         if type(data) == "table" then
47                 table.assign(self, raw)
48         end
49         return self
50 end