packages feed

antiope-sqs 4.0.1 → 5.0.0

raw patch · 3 files changed

+22/−108 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Antiope.SQS.Classy: DeleteMessageBatchError :: SQSError
- Antiope.SQS.Classy: QueueUrl :: Text -> QueueUrl
- Antiope.SQS.Classy: ackMessage :: MonadAWS m => QueueUrl -> Message -> m (Either SQSError ())
- Antiope.SQS.Classy: ackMessages :: MonadAWS m => QueueUrl -> [Message] -> m (Either SQSError ())
- Antiope.SQS.Classy: data SQSError
- Antiope.SQS.Classy: drainQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS.Classy: messageInBody :: Text -> Maybe Text
- Antiope.SQS.Classy: messageToS3Uri :: Message -> Maybe S3Uri
- Antiope.SQS.Classy: messageToS3Uri' :: Text -> Maybe S3Uri
- Antiope.SQS.Classy: newtype QueueUrl
- Antiope.SQS.Classy: readQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS: ackMessage :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> Message -> m (Either SQSError ())
+ Antiope.SQS: ackMessage :: MonadAWS m => QueueUrl -> Message -> m (Either SQSError ())
- Antiope.SQS: ackMessages :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> [Message] -> m (Either SQSError ())
+ Antiope.SQS: ackMessages :: MonadAWS m => QueueUrl -> [Message] -> m (Either SQSError ())
- Antiope.SQS: drainQueue :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> m [Message]
+ Antiope.SQS: drainQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS: readQueue :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> m [Message]
+ Antiope.SQS: readQueue :: MonadAWS m => QueueUrl -> m [Message]

Files

antiope-sqs.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: b55dc8e9a043c5df30c6232c86d8ec02c368e68348eb16ab5682893826456042+-- hash: 0f6f3d2eecda5e123fe534587a05489e19cbdc7b7bf00a03996401b70989f8f2  name:           antiope-sqs-version:        4.0.1+version:        5.0.0 description:    Please see the README on Github at <https://github.com/arbor/antiope#readme> category:       Services homepage:       https://github.com/arbor/antiope#readme@@ -47,7 +47,6 @@     , unliftio-core   exposed-modules:       Antiope.SQS-      Antiope.SQS.Classy       Antiope.SQS.Types   other-modules:       Paths_antiope_sqs
src/Antiope/SQS.hs view
@@ -10,52 +10,47 @@ , messageToS3Uri' ) where -import Antiope.S3              (S3Uri (..))-import Antiope.SQS.Types       (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))+import Antiope.S3          (S3Uri (..))+import Antiope.SQS.Types   (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError)) import Control.Lens-import Control.Monad           (join)-import Control.Monad.IO.Unlift (MonadUnliftIO)-import Control.Monad.Loops     (unfoldWhileM)+import Control.Monad       (join)+import Control.Monad.Loops (unfoldWhileM) import Data.Aeson.Lens-import Data.Maybe              (catMaybes)-import Data.Text               (Text, pack, unpack)-import Network.AWS             (HasEnv)-import Network.AWS.S3          (BucketName (..), ObjectKey (..))+import Data.Maybe          (catMaybes)+import Data.Text           (Text, pack, unpack)+import Network.AWS         (MonadAWS)+import Network.AWS.S3      (BucketName (BucketName), ObjectKey (ObjectKey)) import Network.AWS.SQS  import qualified Network.AWS as AWS import qualified Network.URI as URI  -- | Reads the specified SQS queue once returning a bath of messages-readQueue :: (HasEnv e, MonadUnliftIO m)-  => e-  -> QueueUrl+readQueue :: MonadAWS m+  => QueueUrl   -> m [Message]-readQueue e (QueueUrl queueUrl) = AWS.runResourceT . AWS.runAWS e $ do+readQueue (QueueUrl queueUrl) = do   -- max wait time allowed by aws is 20sec, max number messages to recieve is 10   resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10   return $ resp ^. rmrsMessages  -- | Reads the specified SQS queue until it is empty and returns a list of messages-drainQueue :: (HasEnv e, MonadUnliftIO m)-  => e-  -> QueueUrl+drainQueue :: MonadAWS m+  => QueueUrl   -> m [Message]-drainQueue e queueUrl = join <$> unfoldWhileM (not . null) (readQueue e queueUrl)+drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl) -ackMessage :: (HasEnv e, MonadUnliftIO m)-  => e-  -> QueueUrl+ackMessage :: MonadAWS m+  => QueueUrl   -> Message   -> m (Either SQSError ())-ackMessage e q msg = ackMessages e q [msg]+ackMessage q msg = ackMessages q [msg] -ackMessages :: (HasEnv e, MonadUnliftIO m)-  => e-  -> QueueUrl+ackMessages :: MonadAWS m+  => QueueUrl   -> [Message]   -> m (Either SQSError ())-ackMessages e (QueueUrl queueUrl) msgs = AWS.runResourceT . AWS.runAWS e $ do+ackMessages (QueueUrl queueUrl) msgs = do   let receipts = catMaybes $ msgs ^.. each . mReceiptHandle   -- each dmbr needs an ID. just use the list index.   let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])
− src/Antiope/SQS/Classy.hs
@@ -1,80 +0,0 @@-module Antiope.SQS.Classy-( QueueUrl(..)-, SQSError(..)-, readQueue-, drainQueue-, ackMessage-, ackMessages-, messageInBody-, messageToS3Uri-, messageToS3Uri'-) where--import Antiope.S3          (S3Uri (..))-import Antiope.SQS.Types   (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))-import Control.Lens-import Control.Monad       (join)-import Control.Monad.Loops (unfoldWhileM)-import Data.Aeson.Lens-import Data.Maybe          (catMaybes)-import Data.Text           (Text, pack, unpack)-import Network.AWS         (MonadAWS)-import Network.AWS.S3      (BucketName (BucketName), ObjectKey (ObjectKey))-import Network.AWS.SQS--import qualified Network.AWS as AWS-import qualified Network.URI as URI---- | Reads the specified SQS queue once returning a bath of messages-readQueue :: MonadAWS m-  => QueueUrl-  -> m [Message]-readQueue (QueueUrl queueUrl) = do-  -- max wait time allowed by aws is 20sec, max number messages to recieve is 10-  resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10-  return $ resp ^. rmrsMessages---- | Reads the specified SQS queue until it is empty and returns a list of messages-drainQueue :: MonadAWS m-  => QueueUrl-  -> m [Message]-drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl)--ackMessage :: MonadAWS m-  => QueueUrl-  -> Message-  -> m (Either SQSError ())-ackMessage q msg = ackMessages q [msg]--ackMessages :: MonadAWS m-  => QueueUrl-  -> [Message]-  -> m (Either SQSError ())-ackMessages (QueueUrl queueUrl) msgs = do-  let receipts = catMaybes $ msgs ^.. each . mReceiptHandle-  -- each dmbr needs an ID. just use the list index.-  let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])-  resp <- AWS.send $ deleteMessageBatch queueUrl & dmbEntries .~ dmbres-  -- only acceptable if no errors.-  if resp ^. dmbrsResponseStatus == 200-    then case resp ^. dmbrsFailed of-        [] -> return $ Right ()-        _  -> return $ Left DeleteMessageBatchError-    else return $ Left DeleteMessageBatchError---- Extract the "Message" content in the body if have-messageInBody :: Text -> Maybe Text-messageInBody body = body ^? key "Message" . _String--messageToS3Uri :: Message -> Maybe S3Uri-messageToS3Uri msg = join $ messageToS3Uri' <$> msg ^. mBody--messageToS3Uri' :: Text -> Maybe S3Uri-messageToS3Uri' msg = do-  s3m <- messageInBody msg ^? _Just . key "Records" . nth 0 . key "s3"-  b   <- s3m ^? key "bucket" . key "name" . _String-  k   <- s3m ^? key "object" . key "key" . _String-  pure $ S3Uri (BucketName b) (ObjectKey $ uriDecode k)--uriDecode :: Text -> Text-uriDecode = pack . URI.unEscapeString . unpack