/**
 * @module CircuitBreaker
 */
/**
 * @internal
 */
export declare const circuitBreakerStorageLua = "\n-- @template TMetrics\n-- @param circuitBreakerPolicy InternalCircuitBreakerPolicy<TMetrics>\n-- @param currentDate number\nlocal function CircuitBreakerStorage(circuitBreakerPolicy, currentDate)    \n    -- @param key string\n    -- @param AllCircuitBreakerState<TMetrics>\n    local function find(key)\n        if redis.call(\"EXISTS\", key) == 1 then\n            local value = redis.call(\"GET\", key)\n            return cjson.decode(value)\n        end\n        \n        return circuitBreakerPolicy.initialState()\n    end\n\n    return {\n        -- @param key string\n        -- @param update DatabaseCircuitBreakerUpdateStateFn<TMetrics>\n        atomicUpdate = function(key, update)\n            local currentState = find(key)\n            local newState = update(currentState, currentDate)\n            redis.call(\"set\", key, cjson.encode(newState))\n\n            return {\n                from = currentState.type,\n                to = newState.type,\n            }\n        end\n    }\nend\n";
