{-# LANGUAGE ScopedTypeVariables #-} module Antiope.S3.Strict ( unsafeDownload , download , downloadFromS3Uri , unsafeDownloadMap , downloadMap , downloadMapFromS3Uri ) where import Antiope.Core () import Antiope.S3.Types (S3Uri) import Control.Monad ((<$!>)) import Control.Monad.Trans.AWS hiding (send) import Control.Monad.Trans.Resource import Network.AWS (MonadAWS) import qualified Antiope.S3.Lazy as LBS import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS import qualified Network.AWS.S3 as AWS unsafeDownload :: (MonadAWS m, MonadUnliftIO m) => AWS.BucketName -> AWS.ObjectKey -> m BS.ByteString unsafeDownload bucketName objectKey = runResourceT $ LBS.toStrict <$!> LBS.unsafeDownload bucketName objectKey download :: (MonadAWS m, MonadUnliftIO m) => AWS.BucketName -> AWS.ObjectKey -> m (Maybe BS.ByteString) download bucketName objectKey = runResourceT $ (LBS.toStrict <$!>) <$!> LBS.download bucketName objectKey downloadFromS3Uri :: (MonadAWS m, MonadUnliftIO m) => S3Uri -> m (Maybe BS.ByteString) downloadFromS3Uri s3Uri = runResourceT $ (LBS.toStrict <$!>) <$!> LBS.downloadFromS3Uri s3Uri unsafeDownloadMap :: (MonadAWS m, MonadUnliftIO m) => (LBS.ByteString -> LBS.ByteString) -> AWS.BucketName -> AWS.ObjectKey -> m BS.ByteString unsafeDownloadMap f bucketName objectKey = runResourceT $ LBS.toStrict <$!> (f <$> LBS.unsafeDownload bucketName objectKey) downloadMap :: (MonadAWS m, MonadUnliftIO m) => (LBS.ByteString -> LBS.ByteString) -> AWS.BucketName -> AWS.ObjectKey -> m (Maybe BS.ByteString) downloadMap f bucketName objectKey = runResourceT $ (LBS.toStrict <$!>) <$!> (fmap f <$> LBS.download bucketName objectKey) downloadMapFromS3Uri :: (MonadAWS m, MonadUnliftIO m) => (LBS.ByteString -> LBS.ByteString) -> S3Uri -> m (Maybe BS.ByteString) downloadMapFromS3Uri f s3Uri = runResourceT $ (LBS.toStrict <$!>) <$!> (fmap f <$> LBS.downloadFromS3Uri s3Uri)