local pcall = pcall
local require = require
local iopen = io.open
local smatch = string.match

local Utils = {}

-- read file
function Utils.read_file(file_path)
    local f = iopen(file_path, "rb")
    local content = f:read("*a")
    f:close()
    return content
end


local function require_module(module_name)
    return require(module_name)
end


-- try to require
function Utils.try_require(module_name, default)
    local ok, module_or_err = pcall(require_module, module_name)

    if ok == true then return module_or_err end

    if ok == false and smatch(module_or_err, "'" .. module_name .. "' not found") then
        return default
    else
        error(module_or_err)
    end
end


function Utils.dirname(str)
    if str:match(".-/.-") then
        local name = string.gsub(str, "(.*/)(.*)", "%1")
        return name
    else
        return ''
    end
end

return Utils