Module:DataFetch
From Project Rebearth
Documentation for this module may be created at Module:DataFetch/doc
-- Written with ❤️ by fshark
local NOT_APPLICABLE = "N/A"
local title = mw.title.new("Module:DataFetch/data.json")
local data = title and title.exists and mw.text.jsonDecode(title:getContent())
assert(data, "Data failed to load. Please check \"Module:DataFetch/data.json\" exists.")
local biomeKeys = {
wood = "w",
stone = "s",
earth = "e",
arctic = "a"
}
-- if the biome argument is the name of the biome rather than its letter, return the corresponding letter
local function getBiomeKey(biomeName)
return biomeKeys[string.lower(biomeName)] or biomeName
end
-- returns first argument that is not an empty string
local function getValidArg(...)
for i = 1, select("#", ...) do
local arg = select(i, ...)
if arg and arg ~= "" then
return arg
end
end
end
local function valueFind(t, ...)
for i = 1, select("#", ...) do
local k = select(i, ...)
local v = t[k]
if type(v) == "table" then
return valueFind(v, ...)
end
if v ~= nil then
return v
end
end
return NOT_APPLICABLE
end
return {
-- Universal getter for any property, for use with Template:BuildingData
GetBuildingData = function(f)
local args = f.args
local targetData = getValidArg(args.data)
local biome = getBiomeKey(getValidArg(args.biome))
local resource = getValidArg(args.resource, args.res)
local name = getValidArg(args.name)
local buildingData = data[name]
if not buildingData then
return NOT_APPLICABLE
end
return valueFind(buildingData, targetData, resource, biome)
end
}