antiope-s3-7.4.3: src/Antiope/S3/Internal.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-}
module Antiope.S3.Internal where
import Control.Lens
import Data.Monoid ((<>))
import Data.Text (Text)
import Network.AWS (MonadAWS)
import Network.AWS.S3
import qualified Network.AWS as AWS
toS3Uri :: BucketName -> ObjectKey -> Text
toS3Uri (BucketName b) (ObjectKey k) = "s3://" <> b <> "/" <> k
-- Builds the request for the next page of a NextObjectsV2 request,
-- based on the original request and the most recent response.
nextPageReq :: ListObjectsV2 -> ListObjectsV2Response -> ListObjectsV2
nextPageReq initial resp = initial & lovContinuationToken .~ resp ^. lovrsNextContinuationToken
-- The type signature is like this so that it can be used with `unfoldM`
lsBucketPage :: MonadAWS m
=> Maybe ListObjectsV2
-> m (Maybe (ListObjectsV2Response, Maybe ListObjectsV2))
lsBucketPage Nothing = pure Nothing
lsBucketPage (Just req) = do
resp <- AWS.send req
pure . Just . (resp, ) $
case resp ^. lovrsIsTruncated of
Just True -> Just $ nextPageReq req resp
_ -> Nothing