-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | WAI Middleware to cache things
--   
--   Please see README.md
@package wai-middleware-caching
@version 0.1.0.2

module Network.Wai.Middleware.Cache
cache :: CacheBackend cc ck cv -> Middleware
cacheNoBody :: CacheBackend cc ck cv -> Middleware

-- | The data structure that should contains everything you need to create
--   a cache backend
data CacheBackend cacheContainer cacheKey cacheVal
CacheBackend :: (Request -> ByteString -> IO cacheKey) -> (Request -> ByteString -> IO Bool) -> (cacheContainer -> cacheKey -> cacheVal -> IO ()) -> (Request -> Response -> IO ()) -> (Request -> Response -> IO ()) -> (Response -> IO cacheVal) -> (cacheVal -> Response) -> (cacheContainer -> cacheKey -> IO (Maybe cacheVal)) -> cacheContainer -> CacheBackend cacheContainer cacheKey cacheVal

-- | Get cacheKey from request and its body
[keyFromReq] :: CacheBackend cacheContainer cacheKey cacheVal -> Request -> ByteString -> IO cacheKey

-- | Function to check whether cache or not
[toCache] :: CacheBackend cacheContainer cacheKey cacheVal -> Request -> ByteString -> IO Bool

-- | Adding to cache
[addToCache] :: CacheBackend cacheContainer cacheKey cacheVal -> cacheContainer -> cacheKey -> cacheVal -> IO ()

-- | Action to perform before each caching request
[actionOnCache] :: CacheBackend cacheContainer cacheKey cacheVal -> Request -> Response -> IO ()

-- | Action to perfom before each cache miss
[actionOnCacheMiss] :: CacheBackend cacheContainer cacheKey cacheVal -> Request -> Response -> IO ()

-- | Transform response to cached value
[responseToCacheVal] :: CacheBackend cacheContainer cacheKey cacheVal -> Response -> IO cacheVal

-- | Transform cached value to response
[cacheValToResponse] :: CacheBackend cacheContainer cacheKey cacheVal -> cacheVal -> Response

-- | cache lookup
[lookupCache] :: CacheBackend cacheContainer cacheKey cacheVal -> cacheContainer -> cacheKey -> IO (Maybe cacheVal)

-- | A cache container
[cacheContainer] :: CacheBackend cacheContainer cacheKey cacheVal -> cacheContainer

-- | Helper for your cache backend
responseToLBS :: Response -> IO ByteString
