{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Mismi.S3.Unsafe (
hoistUploadError
, upload
, uploadWithMode
, uploadRecursive
, uploadRecursiveWithMode
, write
, writeWithMode
, liftWriteResult
, hoistDownloadError
, download
, downloadWithMode
, downloadRecursive
, downloadRecursiveWithMode
) where
import Control.Monad.Catch (throwM)
import Control.Monad.Trans.Except (runExceptT)
import Mismi.Control
import qualified Mismi.S3.Commands as Commands
import Mismi.S3.Core.Data
import Mismi.S3.Data
import Mismi.S3.Internal.Parallel (RunError (..))
import P
import System.FilePath (FilePath)
hoistUploadError :: UploadError -> AWS ()
hoistUploadError e =
case e of
UploadSourceMissing f ->
throwM $ SourceFileMissing f
UploadDestinationExists a ->
throwM $ DestinationAlreadyExists a
UploadSourceNotDirectory f ->
throwM $ SourceNotDirectory f
MultipartUploadError (WorkerError a) ->
throwM $ a
MultipartUploadError (BlowUpError a) ->
throwM $ a
upload :: FilePath -> Address -> AWS ()
upload f a =
either hoistUploadError pure =<< runExceptT (Commands.upload f a)
uploadWithMode :: WriteMode -> FilePath -> Address -> AWS ()
uploadWithMode w f a =
either hoistUploadError pure =<< runExceptT (Commands.uploadWithMode w f a)
uploadRecursive :: FilePath -> Address -> Int -> AWS ()
uploadRecursive f a i =
either hoistUploadError pure =<< runExceptT (Commands.uploadRecursive f a i)
uploadRecursiveWithMode :: WriteMode -> FilePath -> Address -> Int -> AWS ()
uploadRecursiveWithMode w f a i =
either hoistUploadError pure =<< runExceptT (Commands.uploadRecursiveWithMode w f a i)
liftWriteResult :: WriteResult -> AWS ()
liftWriteResult = \case
WriteOk ->
pure ()
WriteDestinationExists a ->
throwM $ DestinationAlreadyExists a
write :: Address -> Text -> AWS ()
write a t =
Commands.write a t >>= liftWriteResult
writeWithMode :: WriteMode -> Address -> Text -> AWS ()
writeWithMode m a t =
Commands.writeWithMode m a t >>= liftWriteResult
hoistDownloadError :: DownloadError -> AWS ()
hoistDownloadError e =
case e of
DownloadSourceMissing a ->
throwM $ SourceMissing DownloadError a
DownloadDestinationExists f ->
throwM $ DestinationFileExists f
DownloadDestinationNotDirectory f ->
throwM $ DestinationNotDirectory f
DownloadInvariant a b ->
throwM $ Invariant (renderDownloadError $ DownloadInvariant a b)
MultipartError (WorkerError a) ->
throwM a
MultipartError (BlowUpError a) ->
throwM a
download :: Address -> FilePath -> AWS ()
download a f =
either hoistDownloadError pure =<< runExceptT (Commands.download a f)
downloadWithMode :: WriteMode -> Address -> FilePath -> AWS ()
downloadWithMode m a f =
either hoistDownloadError pure =<< runExceptT (Commands.downloadWithMode m a f)
downloadRecursive :: Address -> FilePath -> AWS ()
downloadRecursive a f =
either hoistDownloadError pure =<< runExceptT (Commands.downloadRecursive a f)
downloadRecursiveWithMode :: WriteMode -> Address -> FilePath -> AWS ()
downloadRecursiveWithMode m a f =
either hoistDownloadError pure =<< runExceptT (Commands.downloadRecursiveWithMode m a f)