module Keenser.Middleware
( middleware
, record
, retry
, runMiddleware
) where
import Data.Aeson
import Keenser.Types
import Keenser.Import
import Keenser.Middleware.Retry
import Keenser.Middleware.Stats
middleware :: Monad m => Middleware m -> Configurator m
middleware m = modify $ \c -> c { kMiddleware = m : kMiddleware c }
runMiddleware :: Monad m
=> [Middleware m]
-> Manager -> Worker m Value -> Object -> Queue
-> m ()
-> m ()
runMiddleware (t:ts) m w j q start = t m w j q $ runMiddleware ts m w j q start
runMiddleware _ _ _ _ _ start = start