/**
 * @module RateLimiter
 */
export declare const rateLimiterLua = "\n-- @template TMetrics\n-- @param rateLimiterStorage RateLimiterStorage<AllRateLimiterState<TMetrics>>\n-- @param rateLimiterStateManager RateLimiterStateManager<TMetrics>\n-- @param currentDate number\n-- @return IRateLimiterAdapter\nlocal function RateLimiter(rateLimiterStorage, rateLimiterStateManager, currentDate)\n    return {\n        -- @param key string\n        -- @return IRedisJsonRateLimiterState | null\n        getState = function(key)\n            local state = rateLimiterStorage.find(key)\n            if state == nil or state == cjson.null then\n                return nil\n            end\n\n            return {\n                success = state.success,\n                attempt = state.attempt,\n                resetTime = state.resetTime\n            }\n        end,\n\n        -- @param key string\n        -- @param limit number\n        -- @return IRedisJsonRateLimiterState\n        updateState = function(key, limit)\n            local track = rateLimiterStateManager.track(currentDate) \n            local updateState = rateLimiterStateManager.updateState(limit, currentDate)\n            return rateLimiterStorage.atomicUpdate({\n                key = key,\n                update = function(prevState)\n                    local newState1 = track(prevState)\n                    local newState2 = updateState(newState1)\n                    return newState2\n                end\n            })\n        end,\n    }\nend\n";
