local ____exports = {}
local jsonLua = require("lib.jsonLua")
local ____log = require("functions.log")
local logError = ____log.logError
local function tryDecode(jsonString)
    return jsonLua.decode(jsonString)
end
local function tryEncode(luaTable)
    return jsonLua.encode(luaTable)
end
--- Converts a JSON string to a Lua table.
-- 
-- In most cases, this function will be used for reading data from a "save#.dat" file. If decoding
-- fails, it will return undefined instead of throwing an error. (This allows execution to continue
-- in cases where users have no current save data or have manually removed their existing save
-- data.)
-- 
-- Under the hood, this uses a custom JSON parser that was measured to be 11.8 times faster than the
-- vanilla JSON parser.
function ____exports.jsonDecode(self, jsonString)
    local ok, luaTableOrErrMsg = pcall(tryDecode, jsonString)
    if not ok then
        logError("Failed to convert the JSON string to a Lua table: " .. jsonString)
        return nil
    end
    return luaTableOrErrMsg
end
--- Converts a Lua table to a JSON string.
-- 
-- In most cases, this function will be used for writing data to a "save#.dat" file. If encoding
-- fails, it will throw an error to prevent writing a blank string or corrupted data to a user's
-- "save#.dat" file.
-- 
-- Under the hood, this uses a custom JSON parser that was measured to be 11.8 times faster than the
-- vanilla JSON parser.
function ____exports.jsonEncode(self, luaTable)
    local ok, jsonStringOrErrMsg = pcall(tryEncode, luaTable)
    if not ok then
        error("Failed to convert the Lua table to JSON: " .. jsonStringOrErrMsg)
    end
    return jsonStringOrErrMsg
end
return ____exports
