]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/serialisation.lua
Refactoring
[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                 else
27                         serialize_pair = false
28                 end
29                 if serialize_pair then
30                         data = data .. kdata .. "=" .. vdata .. ","
31                 end
32         end
33         return data .. "}"
34 end
35
36 function Dragonblocks:deserialize(raw)
37         if not raw then
38                 raw = self
39                 self = {}
40         end
41         raw = "return" .. raw
42         local f = loadstring(raw)
43         local data = f and f()
44         if type(data) == "table" then
45                 table.assign(self, raw)
46         end
47         return self
48 end