packages feed

hw-aws-sqs-conduit-0.1.0.0: src/HaskellWorks/Aws/Sqs/Conduit.hs

module HaskellWorks.Aws.Sqs.Conduit
  ( sqsSink
  , sqsSource
  ) where

import Control.Monad.IO.Class
import Control.Monad.Trans            (lift)
import Data.Conduit
import Data.Text
import Network.AWS                    hiding (await, response)
import Network.AWS.SQS.ReceiveMessage
import Network.AWS.SQS.SendMessage

import qualified Network.AWS as AWS

sqsSink :: MonadAWS m => SendMessage -> Conduit Text m SendMessageResponse
sqsSink sendMessage = do
  maybeM <- await
  case maybeM of
    Just m -> do
      resp <- lift $ send sendMessage
      yield resp
      sqsSink sendMessage
    Nothing -> return ()

sqsSource :: MonadAWS m => ReceiveMessage -> Source m ReceiveMessageResponse
sqsSource receiveMessage = do
  m <- lift $ send receiveMessage
  yield m
  sqsSource receiveMessage