packages feed

yesod-worker-0.1.0.0: src/Yesod/Worker/Util.hs

{-# LANGUAGE RecordWildCards #-}
module Yesod.Worker.Util
  ( enqueue
  , enqueueAt
  , enqueueIn
  ) where

import qualified Keenser as K
import Yesod
import Yesod.Worker.Types

import Control.Concurrent (readMVar)
import Data.Thyme.Clock   (UTCTime)

enqueue :: (ToJSON a, YesodWorker master) => K.Worker (HandlerT master IO) a -> a -> HandlerT master IO ()
enqueue job args = do
  manager <- getManager
  K.enqueue manager job args

enqueueAt :: (ToJSON a, YesodWorker master) => UTCTime -> K.Worker (HandlerT master IO) a -> a -> HandlerT master IO ()
enqueueAt time job args = do
  manager <- getManager
  K.enqueueAt time manager job args

enqueueIn :: (ToJSON a, YesodWorker master) => Rational -> K.Worker (HandlerT master IO) a -> a -> HandlerT master IO ()
enqueueIn snds job args = do
  manager <- getManager
  K.enqueueIn snds manager job args

getManager :: YesodWorker master => HandlerT master IO K.Manager
getManager = do
  Workers{..} <- workers <$> getYesod
  liftIO $ do
    m <- readMVar wManager
    return $! m