Files
soldr-modules/tests_framework/lua/cliargs/config_loader.lua
T
2022-11-22 02:21:28 +03:00

140 lines
2.8 KiB
Lua

local trim = require 'cliargs.utils.trim'
local function read_file(filepath)
local f, err = io.open(filepath, "r")
if not f then
return nil, err
end
local contents = f:read('*all')
f:close()
return contents
end
return {
FORMAT_LOADERS = {
["lua"] = "from_lua",
["json"] = "from_json",
["yaml"] = "from_yaml",
["yml"] = "from_yaml",
["ini"] = "from_ini",
},
--- Load configuration from a Lua file that exports a table.
from_lua = function(filepath)
local file, err = loadfile(filepath)
if not file and err then
return nil, err
end
return file()
end,
--- Load configuration from a JSON file.
---
--- Requires the "dkjson"[1] module to be present on the system. Get it with:
---
--- luarocks install dkjson
---
--- [1] http://dkolf.de/src/dkjson-lua.fsl/home
from_json = function(filepath)
local src, config, _, err
local json = require 'dkjson'
src, err = read_file(filepath)
if not src and err then
return nil, err
end
config, _, err = json.decode(src)
if err then
return nil, err
end
return config
end,
--- Load configuration from an INI file.
---
--- Requires the "inifile"[1] module to be present on the system. Get it with:
---
--- luarocks install inifile
---
--- The INI file must contain a group that lists the default values. For
--- example:
---
--- [cli]
--- quiet = true
--- compress = lzma
---
--- The routine will automatically cast boolean values ("true" and "false")
--- into Lua booleans. You may opt out of this behavior by passing `false`
--- to `no_cast`.
---
--- [1] http://docs.bartbes.com/inifile
from_ini = function(filepath, group, no_cast)
local inifile = require 'inifile'
local config, err
group = group or 'cli'
assert(type(group) == 'string',
'You must provide an INI group to read from.'
)
config, err = inifile.parse(filepath)
if not config and err then
return nil, err
end
if not no_cast then
for k, src_value in pairs(config[group]) do
local v = trim(src_value)
if v == 'true' then
v = true
elseif v == 'false' then
v = false
end
config[group][k] = v
end
end
return config[group]
end,
--- Load configuration from a YAML file.
---
--- Requires the "yaml"[1] module to be present on the system. Get it with:
---
--- luarocks install yaml
---
--- [1] http://doc.lubyk.org/yaml.html
from_yaml = function(filepath)
local src, config, _, err
local yaml = require 'yaml'
src, err = read_file(filepath)
if not src and err then
return nil, err
end
config, err = yaml.load(src)
if not config and err then
return nil, err
end
return config
end
}