working program - with minio monad

This commit is contained in:
Aditya Manthramurthy 2016-12-18 20:08:33 +05:30
parent 07eb59fda5
commit fb6bf1a9cb
4 changed files with 39 additions and 9 deletions

View File

@ -4,10 +4,13 @@ module Main where
import Protolude
import Network.Minio.Data
import Network.Minio.API
import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT)
main :: IO ()
main = do
mc <- connect defaultConnectInfo
res <- runMinio mc $ getService
print res
res <- runResourceT $ runMinio mc $ getService
print $ rpiStatus <$> res

View File

@ -27,14 +27,17 @@ library
, protolude >= 0.1.6 && < 0.2
, bytestring
, case-insensitive
, conduit
, containers
, cryptonite
, http-client
, http-conduit
, http-types
, memory
, resourcet
, text
, time
, transformers-base
default-language: Haskell2010
default-extensions: OverloadedStrings
, NoImplicitPrelude
@ -49,6 +52,7 @@ executable minio-hs-exe
, protolude >= 0.1.6 && < 0.2
, http-conduit
, http-types
, resourcet
default-language: Haskell2010
default-extensions: OverloadedStrings, NoImplicitPrelude

View File

@ -12,6 +12,8 @@ import Network.HTTP.Conduit (Response)
import qualified Network.HTTP.Conduit as NC
import Network.HTTP.Types (Method, Header, Query)
import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT)
import Lib.Prelude
import Network.Minio.Data
@ -30,7 +32,7 @@ import Network.Minio.Sign.V4
-- -- print $ NC.requestBody r
-- NC.httpLbs r mgr
mkSRequest :: RequestInfo -> Minio (Response LByteString)
mkSRequest :: RequestInfo -> Minio ResponseInfo
mkSRequest ri = do
let PayloadSingle pload = payload ri
phash = hashSHA256 pload
@ -56,14 +58,18 @@ mkSRequest ri = do
, NC.requestBody = NC.RequestBodyBS pload
}
NC.httpLbs req mgr
response <- NC.http req mgr
return $ ResponseInfo
(NC.responseStatus response)
(NC.responseHeaders response)
(NC.responseBody response)
requestInfo :: Method -> Maybe Bucket -> Maybe Object
-> Query -> [Header] -> Payload
-> RequestInfo
requestInfo m b o q h p = RequestInfo m b o q h p ""
getService :: Minio (Response LByteString)
getService :: Minio ResponseInfo
getService = mkSRequest $
requestInfo HT.methodGet Nothing Nothing [] [] $
PayloadSingle ""

View File

@ -3,6 +3,7 @@ module Network.Minio.Data
(
ConnectInfo(..)
, RequestInfo(..)
, ResponseInfo(..)
, MinioConn(..)
, Bucket
, Object
@ -15,10 +16,14 @@ module Network.Minio.Data
) where
import qualified Data.ByteString as B
import qualified Data.Conduit as C
import Network.HTTP.Client (defaultManagerSettings)
import Network.HTTP.Types (Method, Header, Query)
import Network.HTTP.Types (Method, Header, Query, Status)
import qualified Network.HTTP.Conduit as NC
import Control.Monad.Trans.Resource (MonadThrow, MonadResource, ResourceT, ResIO)
import Control.Monad.Base (MonadBase)
import Lib.Prelude
data ConnectInfo = ConnectInfo {
@ -50,6 +55,12 @@ data RequestInfo = RequestInfo {
, payloadHash :: ByteString
}
data ResponseInfo = ResponseInfo {
rpiStatus :: Status
, rpiHeaders :: [Header]
, rpiBody :: C.ResumableSource Minio ByteString
}
getPathFromRI :: RequestInfo -> ByteString
getPathFromRI ri = B.concat $ parts
where
@ -60,15 +71,21 @@ data MinioErr = MErrMsg ByteString
deriving (Show)
newtype Minio a = Minio {
unMinio :: ReaderT MinioConn (ExceptT MinioErr IO) a
} deriving (
unMinio :: ReaderT MinioConn (ExceptT MinioErr (ResourceT IO)) a
}
deriving (
Functor
, Applicative
, Monad
, MonadIO
, MonadReader MinioConn
, MonadError MinioErr
, MonadThrow
, MonadBase IO
, MonadResource
)
-- MinioConn holds connection info and a connection pool
data MinioConn = MinioConn {
mcConnInfo :: ConnectInfo
@ -80,5 +97,5 @@ connect ci = do
mgr <- NC.newManager defaultManagerSettings
return $ MinioConn ci mgr
runMinio :: MinioConn -> Minio a -> IO (Either MinioErr a)
runMinio :: MinioConn -> Minio a -> ResourceT IO (Either MinioErr a)
runMinio conn = runExceptT . flip runReaderT conn . unMinio