MiddlewareAgent
Middleware Agent
Examples
-- local Middleware = ...
-- local MiddlewareAgent = ...
local Logger = {}
Logger.__index = Logger
--type LoggerInternals = {
-- middleware: MiddlewareAgent.MiddlewareAgent<Logger>
-- }
--type Logger = typeof(setmetatable({} :: LoggerInternals, Logger))
--type LoggerMiddlewares = {
-- Log: Middleware.MiddlewaresMethod<Logger, LoggerLogArgs, LoggerLogRet>
-- }
------------------------------------------------------
function Logger.New(middlewares: LoggerMiddlewares?): Logger
local self = setmetatable({} :: LoggerInternals, Logger)
self.middleware = MiddlewareAgent.New(self, middlewares or {})
return self
end
--type LoggerLogArgs = { Message: string }
--type LoggerLogRet = {}
function Logger.log(self: Logger, args: LoggerLogArgs): LoggerLogRet
print(args.Message)
return {}
end
function Logger.Log(self: Logger, args)
return self.middleware:CallMethod('Log', args, function(args: LoggerLogArgs): LoggerLogRet
return self:log(args)
end)
end
------------------------------------------------------
do
local logger = Logger.New()
logger:Log { Message = "thats a normal log" }
end
do
local screamMiddleware: Middleware.MiddlewareMethod<Logger, LoggerLogArgs, LoggerLogRet> = function(args)
args.self:log { Message = "FOR THE GLORY OF MY HOMELAND" }
args.Message = `RAAAH, {args.Message:upper()}!!!`
return {
next = args
}
end
local logger = Logger.New({ Log = screamMiddleware })
logger:Log { Message = "Hello" }
logger:log { Message = "vs. normal hello :)" }
end
Types
TargetMiddlewares<TSelf>
type
TargetMiddlewares<TSelf> =
{
[
string
]
:
Middlewares
<
TSelf
,
any
,
any
>
?
}