Module:VarsUtil

local util_args = require ('Module:ArgsUtil') local binser = require('binser')

local p = {}

function p.getVar(var) local val = mw.getCurrentFrame:callParserFunction('#var', var) if val == '' then return nil end return val end

function p.getBool(var) local val = p.getVar(var) return util_args.castAsBool(val) end

function p.setBool(var, val) local bool = util_args.castAsBool(val) if bool then p.setVar(var, 'Yes') else p.setVar(var, 'No') end return bool end

function p.setVar(var, val) mw.getCurrentFrame:callParserFunction('#vardefine:' .. var, val) return val end

function p.setVarOnlyIf(var, val) if not val then return end p.setVar(var, val) end

function p.getGlobalIndex(name) local val = p.getVar('luaGlobalIndex' .. name) return tonumber(val or 0) or 0 end

function p.setGlobalIndex(name) local n = p.getGlobalIndex(name) + 1 p.setVar('luaGlobalIndex' .. name, n)	return n end

function p.resetGlobalIndex(name, val) val = val or 0 p.setVar('luaGlobalIndex' .. name, val) return val end

function p.appendToList(name, val, sep) -- this is just for helping to debug and shouldn't actually be used ever probably sep = sep or ', ' local old_val = p.getVar(name) or '' p.setVar(name, old_val .. sep .. val) end

function p.log(val) p.appendToList('log', tostring(val)) end

function p.logObject(val) local tbl = {} for k, v in pairs(val) do tbl[#tbl+1] = k .. ': ' .. v	end p.appendToList('log', table.concat(tbl,', ')) end

function p.clearAll(tbl) for _, v in ipairs(tbl) do		p.setVar(v, '') end end

function p.setTypedVar(var, val) local val_to_store = binser.serialize(val) p.setVar(var, val_to_store) end

function p.getTypedVar(var) local val = p.getVar(var) if not val then return nil end return binser.deserialize(val)[1] end

function p.setObject(var, val) local val_to_store = binser.serialize(val) p.setVar(var, val_to_store) end

function p.getObject(var) local val = p.getVar(var) if not val then return nil end return binser.deserialize(val)[1] end

return p