45 lines
1.0 KiB
Lua
45 lines
1.0 KiB
Lua
|
local _ENV = mkmodule('json')
|
||
|
local internal = require 'json.internal'
|
||
|
|
||
|
encode_defaults = {
|
||
|
-- For compatibility with jsonxx (C++)
|
||
|
pretty = true,
|
||
|
indent = '\t',
|
||
|
}
|
||
|
|
||
|
function encode(data, options, msg)
|
||
|
local opts = {}
|
||
|
for k, v in pairs(encode_defaults) do opts[k] = v end
|
||
|
for k, v in pairs(options or {}) do opts[k] = v end
|
||
|
return internal:encode(data, msg, opts)
|
||
|
end
|
||
|
|
||
|
function encode_file(data, path, overwrite, ...)
|
||
|
if dfhack.filesystem.exists(path) and not overwrite then
|
||
|
error('File exists: ' .. path)
|
||
|
end
|
||
|
if dfhack.filesystem.isdir(path) then
|
||
|
error('Is a directory: ' .. path)
|
||
|
end
|
||
|
local contents = encode(data, ...)
|
||
|
local f = io.open(path, 'w')
|
||
|
f:write(contents)
|
||
|
f:close()
|
||
|
end
|
||
|
|
||
|
function decode(data, msg)
|
||
|
return internal:decode(data, msg)
|
||
|
end
|
||
|
|
||
|
function decode_file(path, ...)
|
||
|
local f = io.open(path)
|
||
|
if not f then
|
||
|
error('Could not open ' .. path)
|
||
|
end
|
||
|
local raw = f:read('*all')
|
||
|
f:close()
|
||
|
return decode(contents, ...)
|
||
|
end
|
||
|
|
||
|
return _ENV
|