amqp-0.24.0: Network/AMQP/Lifted.hs
{-# LANGUAGE FlexibleContexts #-}
module Network.AMQP.Lifted
( consumeMsgs
, consumeMsgs'
)
where
import qualified Network.AMQP as A
import Network.AMQP.Types
import Control.Monad.Trans.Control
import Data.Text (Text)
import Control.Monad
-- | Lifted version of 'Network.AMQP.consumeMsgs' (please look there for documentation).
--
-- In addition, while the callback function @(('Message', 'Envelope') -> m ())@
-- has access to the captured state, all its side-effects in m are discarded.
consumeMsgs :: MonadBaseControl IO m
=> A.Channel
-> Text -- ^ Specifies the name of the queue to consume from.
-> A.Ack
-> ((A.Message, A.Envelope) -> m ())
-> m A.ConsumerTag
consumeMsgs chan queueName ack callback =
liftBaseWith $ \runInIO ->
A.consumeMsgs chan queueName ack (void . runInIO . callback)
-- | an extended version of @consumeMsgs@ that allows you to define a consumer cancellation callback and include arbitrary arguments.
consumeMsgs' :: MonadBaseControl IO m
=> A.Channel
-> Text -- ^ Specifies the name of the queue to consume from.
-> A.Ack
-> ((A.Message, A.Envelope) -> m ())
-> (ConsumerTag -> m ())
-> FieldTable
-> m A.ConsumerTag
consumeMsgs' chan queueName ack callback cancelled args =
liftBaseWith $ \runInIO ->
A.consumeMsgs' chan queueName ack (void . runInIO . callback) (void . runInIO . cancelled) args