]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/serializer.lua
582e9276c101084d9eb0116274a4eeb0b139549f
[dragonblocks3d-lua.git] / src / serializer.lua
1 local serializer = {}
2
3 function serializer:serialize()
4         local data = "{"
5         for k, v in pairs(self) do
6                 local kdata, vdata
7                 local ktype, vtype = type(k), type(v)
8                 local serialize_pair = true
9                 if ktype == "number" then
10                         kdata = "[" .. k .. "]"
11                 elseif ktype == "string" then
12                         if k:sub(1, 1) == "_" then
13                                 serialize_pair = false
14                         else
15                                 kdata = "[\"" .. k .. "\"]"
16                         end
17                 else
18                         serialize_pair = false
19                 end
20                 if vtype == "table" then
21                         vdata = serializer.serialize(v)
22                 elseif vtype == "string" then
23                         vdata = "\"" .. v .. "\""
24                 elseif vtype == "number" then
25                         vdata = v
26                 elseif vtype == "boolean" then
27                         vdata = v and "true" or "false"
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 serializer:deserialize(raw)
39         raw = "return" .. (raw or "")
40         local f = loadstring(raw)
41         local data = f and f()
42         if type(data) == "table" then
43                 for k, v in pairs(data) do
44                         self[k] = v
45                 end
46         end
47 end
48
49 return serializer