Skip to main content

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>?
}
Show raw api
{
    "functions": [],
    "properties": [],
    "types": [
        {
            "name": "TargetMiddlewares<TSelf>",
            "desc": "",
            "lua_type": "{[string]: Middlewares<TSelf, any, any>?}",
            "source": {
                "line": 93,
                "path": "src/roket/module/MiddlewareAgent.luau"
            }
        }
    ],
    "name": "MiddlewareAgent",
    "desc": "Middleware Agent\n\n#### Examples\n\n```lua\n\t-- local Middleware = ...\n\t-- local MiddlewareAgent = ...\n\n\tlocal Logger = {}\n\tLogger.__index = Logger\n\t--type LoggerInternals = {\n\t--     middleware: MiddlewareAgent.MiddlewareAgent<Logger>\n\t-- }\n\t--type Logger = typeof(setmetatable({} :: LoggerInternals, Logger))\n\t--type LoggerMiddlewares = {\n\t--     Log: Middleware.MiddlewaresMethod<Logger, LoggerLogArgs, LoggerLogRet>\n\t-- }\n\n\t------------------------------------------------------\n\n\tfunction Logger.New(middlewares: LoggerMiddlewares?): Logger\n\t\tlocal self = setmetatable({} :: LoggerInternals, Logger)\n\t\tself.middleware = MiddlewareAgent.New(self, middlewares or {})\n\t\treturn self\n\tend\n\n\t--type LoggerLogArgs = { Message: string }\n\t--type LoggerLogRet = {}\n\tfunction Logger.log(self: Logger, args: LoggerLogArgs): LoggerLogRet\n\t\tprint(args.Message)\n\t\treturn {}\n\tend\n\tfunction Logger.Log(self: Logger, args)\n\t\treturn self.middleware:CallMethod('Log', args, function(args: LoggerLogArgs): LoggerLogRet\n\t\t\treturn self:log(args)\n\t\tend)\n\tend\n\n\t------------------------------------------------------\n\n\tdo\n\t\tlocal logger = Logger.New()\n\t\tlogger:Log { Message = \"thats a normal log\" }\n\tend\n\n\tdo\n\t\tlocal screamMiddleware: Middleware.MiddlewareMethod<Logger, LoggerLogArgs, LoggerLogRet> = function(args)\n\t\t\targs.self:log { Message = \"FOR THE GLORY OF MY HOMELAND\" }\n\t\t\targs.Message = `RAAAH, {args.Message:upper()}!!!`\n\t\t\treturn {\n\t\t\t\tnext = args\n\t\t\t}\n\t\tend\n\t\tlocal logger = Logger.New({ Log = screamMiddleware })\n\t\tlogger:Log { Message = \"Hello\" }\n\t\tlogger:log { Message = \"vs. normal hello :)\" }\n\tend\n```",
    "source": {
        "line": 74,
        "path": "src/roket/module/MiddlewareAgent.luau"
    }
}