66 lines
1.8 KiB
Lua
66 lines
1.8 KiB
Lua
local Log = require "cave.log"
|
|
local Meta = require "cave.meta"
|
|
|
|
local Str = Meta.String
|
|
local validate = Meta.validate
|
|
local Optional = Meta.Optional
|
|
|
|
---@class cave.FunctionLogger
|
|
---@field fn_repr string
|
|
local FunctionLogger = Meta.derive "FuncLogger"
|
|
|
|
---@param fn_name string
|
|
---@param args_fmt string?
|
|
---@param ... any
|
|
function FunctionLogger:init(fn_name, args_fmt, ...)
|
|
local args_repr = (args_fmt and args_fmt:format(...)) or ""
|
|
self.fn_repr = ("%s(%s)"):format(fn_name, args_repr)
|
|
end
|
|
|
|
---@param fn_name string
|
|
---@param args_fmt string?
|
|
---@param ... any
|
|
---@return cave.FunctionLogger
|
|
function FunctionLogger.new(fn_name, args_fmt, ...)
|
|
validate { fn_name = { fn_name, Str }, args_fmt = { args_fmt, Optional(Str) } }
|
|
local logger = setmetatable({}, FunctionLogger)
|
|
logger:init(fn_name, args_fmt, ...)
|
|
return logger
|
|
end
|
|
|
|
---@return cave.FunctionLogger
|
|
function FunctionLogger:call()
|
|
Log.dbg("> %s", self.fn_repr)
|
|
return self
|
|
end
|
|
|
|
---@param err_fmt string?
|
|
---@param ... any
|
|
function FunctionLogger:err(err_fmt, ...)
|
|
validate { err = { err_fmt, Optional(Str) } }
|
|
local res_msg = "err"
|
|
if err_fmt ~= nil then res_msg = res_msg .. " " .. err_fmt:format(...) end
|
|
Log.err(("< %s - %s"):format(self.fn_repr, res_msg))
|
|
end
|
|
|
|
--
|
|
---@param warn_fmt string?
|
|
---@param ... any
|
|
function FunctionLogger:warn(warn_fmt, ...)
|
|
validate { err = { warn_fmt, Optional(Str) } }
|
|
local res_msg = "warn"
|
|
if warn_fmt ~= nil then res_msg = res_msg .. " " .. warn_fmt:format(...) end
|
|
Log.err(("~ %s - %s"):format(self.fn_repr, res_msg))
|
|
end
|
|
|
|
---@param res_fmt string?
|
|
---@param ... any
|
|
function FunctionLogger:ok(res_fmt, ...)
|
|
validate { results = { res_fmt, Optional(Str) } }
|
|
local res_msg = "ok"
|
|
if res_fmt ~= nil then res_msg = res_msg .. " " .. res_fmt:format(...) end
|
|
Log.dbg(("< %s - %s"):format(self.fn_repr, res_msg))
|
|
end
|
|
|
|
return FunctionLogger
|