{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TemplateHaskell #-} 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