module Antiope.Messages
( QueueUrl(..)
, SQSError(..)
, messageInBody
, messageToS3Uri
, messageToS3Uri'
) where
import Antiope.Messages.Types (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))
import Antiope.S3 (S3Uri (..))
import Control.Lens
import Control.Monad (join)
import Data.Aeson.Lens
import Data.Text (Text, pack, unpack)
import Network.AWS.S3 (BucketName (BucketName), ObjectKey (ObjectKey))
import Network.AWS.SQS
import qualified Network.URI as URI
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