From abed05e523285102a443da2ba0c06f2db63688e4 Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Wed, 10 Jul 2019 09:26:54 -0700 Subject: [PATCH] Expose runMinioRes/runMinioResWith (#129) ... to allow applications to manage application resources along side MinIO SDK's internal resources --- src/Network/Minio.hs | 2 ++ src/Network/Minio/Data.hs | 39 ++++++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/Network/Minio.hs b/src/Network/Minio.hs index f944e00..77627fc 100644 --- a/src/Network/Minio.hs +++ b/src/Network/Minio.hs @@ -63,6 +63,8 @@ module Network.Minio , Minio , runMinioWith , runMinio + , runMinioResWith + , runMinioRes -- * Bucket Operations diff --git a/src/Network/Minio/Data.hs b/src/Network/Minio/Data.hs index cff7c6d..c50c6d5 100644 --- a/src/Network/Minio/Data.hs +++ b/src/Network/Minio/Data.hs @@ -985,18 +985,7 @@ connect ci = do -- `MinioConn`. This reuses connections, but otherwise it is similar -- to `runMinio`. runMinioWith :: MinioConn -> Minio a -> IO (Either MinioErr a) -runMinioWith conn m = runResourceT . flip runReaderT conn . unMinio $ - fmap Right m `U.catches` - [ U.Handler handlerServiceErr - , U.Handler handlerHE - , U.Handler handlerFE - , U.Handler handlerValidation - ] - where - handlerServiceErr = return . Left . MErrService - handlerHE = return . Left . MErrHTTP - handlerFE = return . Left . MErrIO - handlerValidation = return . Left . MErrValidation +runMinioWith conn m = runResourceT $ runMinioResWith conn m -- | Given `ConnectInfo` and a HTTP connection manager, create a -- `MinioConn`. @@ -1009,7 +998,31 @@ mkMinioConn ci mgr = do runMinio :: ConnectInfo -> Minio a -> IO (Either MinioErr a) runMinio ci m = do conn <- connect ci - runMinioWith conn m + runResourceT $ runMinioResWith conn m + +-- | Similar to 'runMinioWith'. Allows applications to allocate/release +-- its resources along side MinIO's internal resources. +runMinioResWith :: MinioConn -> Minio a -> ResourceT IO (Either MinioErr a) +runMinioResWith conn m = + flip runReaderT conn . unMinio $ + fmap Right m `U.catches` + [ U.Handler handlerServiceErr + , U.Handler handlerHE + , U.Handler handlerFE + , U.Handler handlerValidation + ] + where + handlerServiceErr = return . Left . MErrService + handlerHE = return . Left . MErrHTTP + handlerFE = return . Left . MErrIO + handlerValidation = return . Left . MErrValidation + +-- | Similar to 'runMinio'. Allows applications to allocate/release +-- its resources along side MinIO's internal resources. +runMinioRes :: ConnectInfo -> Minio a -> ResourceT IO (Either MinioErr a) +runMinioRes ci m = do + conn <- liftIO $ connect ci + runMinioResWith conn m s3Name :: Text -> Text -> Name s3Name ns s = Name s (Just ns) Nothing