]> jfr.im git - irc/quakenet/newserv.git/blob - lua/lib/serialise.lua
LUA: Add lua stdlib.
[irc/quakenet/newserv.git] / lua / lib / serialise.lua
1 function savetable(filename, t)
2 local f = assert(io.open(filename, "w"))
3
4 f:write("return\n")
5
6 serialise(f, t)
7
8 f:close()
9 end
10
11 function loadtable(filename)
12 local func, err = loadfile(filename)
13
14 if not func then
15 return nil
16 end
17
18 return func()
19 end
20
21 function serialise(f, o)
22 if type(o) == "number" then
23 f:write(o)
24 elseif type(o) == "string" then
25 f:write(string.format("%q", o))
26 elseif type(o) == "boolean" then
27 if o == true then
28 f:write("true")
29 else
30 f:write("false")
31 end
32 elseif type(o) == "table" then
33 f:write("{\n")
34 for k,v in pairs(o) do
35 f:write(" [")
36 serialise(f, k)
37 f:write("] = ")
38 serialise(f, v)
39 f:write(",\n")
40 end
41 f:write("}\n")
42 elseif type(o) == "nil" then
43 f:write("nil")
44 else
45 error("cannot serialise a " .. type(o))
46 end
47 end
48
49 function loadtextfile(file, fn)
50 local f = io.open(file, "r")
51 if not f then
52 return false
53 end
54
55 while true do
56 local line = f:read()
57 if line == nil then
58 return true
59 end
60
61 fn(line)
62 end
63 end