working program - with minio monad
This commit is contained in:
parent
07eb59fda5
commit
fb6bf1a9cb
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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 ""
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user