working program - with minio monad
This commit is contained in:
parent
07eb59fda5
commit
fb6bf1a9cb
@ -4,10 +4,13 @@ module Main where
|
|||||||
|
|
||||||
import Protolude
|
import Protolude
|
||||||
|
|
||||||
|
import Network.Minio.Data
|
||||||
|
|
||||||
import Network.Minio.API
|
import Network.Minio.API
|
||||||
|
import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
mc <- connect defaultConnectInfo
|
mc <- connect defaultConnectInfo
|
||||||
res <- runMinio mc $ getService
|
res <- runResourceT $ runMinio mc $ getService
|
||||||
print res
|
print $ rpiStatus <$> res
|
||||||
|
|||||||
@ -27,14 +27,17 @@ library
|
|||||||
, protolude >= 0.1.6 && < 0.2
|
, protolude >= 0.1.6 && < 0.2
|
||||||
, bytestring
|
, bytestring
|
||||||
, case-insensitive
|
, case-insensitive
|
||||||
|
, conduit
|
||||||
, containers
|
, containers
|
||||||
, cryptonite
|
, cryptonite
|
||||||
, http-client
|
, http-client
|
||||||
, http-conduit
|
, http-conduit
|
||||||
, http-types
|
, http-types
|
||||||
, memory
|
, memory
|
||||||
|
, resourcet
|
||||||
, text
|
, text
|
||||||
, time
|
, time
|
||||||
|
, transformers-base
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
default-extensions: OverloadedStrings
|
default-extensions: OverloadedStrings
|
||||||
, NoImplicitPrelude
|
, NoImplicitPrelude
|
||||||
@ -49,6 +52,7 @@ executable minio-hs-exe
|
|||||||
, protolude >= 0.1.6 && < 0.2
|
, protolude >= 0.1.6 && < 0.2
|
||||||
, http-conduit
|
, http-conduit
|
||||||
, http-types
|
, http-types
|
||||||
|
, resourcet
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
default-extensions: OverloadedStrings, NoImplicitPrelude
|
default-extensions: OverloadedStrings, NoImplicitPrelude
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,8 @@ import Network.HTTP.Conduit (Response)
|
|||||||
import qualified Network.HTTP.Conduit as NC
|
import qualified Network.HTTP.Conduit as NC
|
||||||
import Network.HTTP.Types (Method, Header, Query)
|
import Network.HTTP.Types (Method, Header, Query)
|
||||||
|
|
||||||
|
import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT)
|
||||||
|
|
||||||
import Lib.Prelude
|
import Lib.Prelude
|
||||||
|
|
||||||
import Network.Minio.Data
|
import Network.Minio.Data
|
||||||
@ -30,7 +32,7 @@ import Network.Minio.Sign.V4
|
|||||||
-- -- print $ NC.requestBody r
|
-- -- print $ NC.requestBody r
|
||||||
-- NC.httpLbs r mgr
|
-- NC.httpLbs r mgr
|
||||||
|
|
||||||
mkSRequest :: RequestInfo -> Minio (Response LByteString)
|
mkSRequest :: RequestInfo -> Minio ResponseInfo
|
||||||
mkSRequest ri = do
|
mkSRequest ri = do
|
||||||
let PayloadSingle pload = payload ri
|
let PayloadSingle pload = payload ri
|
||||||
phash = hashSHA256 pload
|
phash = hashSHA256 pload
|
||||||
@ -56,14 +58,18 @@ mkSRequest ri = do
|
|||||||
, NC.requestBody = NC.RequestBodyBS pload
|
, 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
|
requestInfo :: Method -> Maybe Bucket -> Maybe Object
|
||||||
-> Query -> [Header] -> Payload
|
-> Query -> [Header] -> Payload
|
||||||
-> RequestInfo
|
-> RequestInfo
|
||||||
requestInfo m b o q h p = RequestInfo m b o q h p ""
|
requestInfo m b o q h p = RequestInfo m b o q h p ""
|
||||||
|
|
||||||
getService :: Minio (Response LByteString)
|
getService :: Minio ResponseInfo
|
||||||
getService = mkSRequest $
|
getService = mkSRequest $
|
||||||
requestInfo HT.methodGet Nothing Nothing [] [] $
|
requestInfo HT.methodGet Nothing Nothing [] [] $
|
||||||
PayloadSingle ""
|
PayloadSingle ""
|
||||||
|
|||||||
@ -3,6 +3,7 @@ module Network.Minio.Data
|
|||||||
(
|
(
|
||||||
ConnectInfo(..)
|
ConnectInfo(..)
|
||||||
, RequestInfo(..)
|
, RequestInfo(..)
|
||||||
|
, ResponseInfo(..)
|
||||||
, MinioConn(..)
|
, MinioConn(..)
|
||||||
, Bucket
|
, Bucket
|
||||||
, Object
|
, Object
|
||||||
@ -15,10 +16,14 @@ module Network.Minio.Data
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
|
import qualified Data.Conduit as C
|
||||||
import Network.HTTP.Client (defaultManagerSettings)
|
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 qualified Network.HTTP.Conduit as NC
|
||||||
|
|
||||||
|
import Control.Monad.Trans.Resource (MonadThrow, MonadResource, ResourceT, ResIO)
|
||||||
|
import Control.Monad.Base (MonadBase)
|
||||||
|
|
||||||
import Lib.Prelude
|
import Lib.Prelude
|
||||||
|
|
||||||
data ConnectInfo = ConnectInfo {
|
data ConnectInfo = ConnectInfo {
|
||||||
@ -50,6 +55,12 @@ data RequestInfo = RequestInfo {
|
|||||||
, payloadHash :: ByteString
|
, payloadHash :: ByteString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data ResponseInfo = ResponseInfo {
|
||||||
|
rpiStatus :: Status
|
||||||
|
, rpiHeaders :: [Header]
|
||||||
|
, rpiBody :: C.ResumableSource Minio ByteString
|
||||||
|
}
|
||||||
|
|
||||||
getPathFromRI :: RequestInfo -> ByteString
|
getPathFromRI :: RequestInfo -> ByteString
|
||||||
getPathFromRI ri = B.concat $ parts
|
getPathFromRI ri = B.concat $ parts
|
||||||
where
|
where
|
||||||
@ -60,15 +71,21 @@ data MinioErr = MErrMsg ByteString
|
|||||||
deriving (Show)
|
deriving (Show)
|
||||||
|
|
||||||
newtype Minio a = Minio {
|
newtype Minio a = Minio {
|
||||||
unMinio :: ReaderT MinioConn (ExceptT MinioErr IO) a
|
unMinio :: ReaderT MinioConn (ExceptT MinioErr (ResourceT IO)) a
|
||||||
} deriving (
|
}
|
||||||
|
deriving (
|
||||||
Functor
|
Functor
|
||||||
, Applicative
|
, Applicative
|
||||||
, Monad
|
, Monad
|
||||||
, MonadIO
|
, MonadIO
|
||||||
, MonadReader MinioConn
|
, MonadReader MinioConn
|
||||||
|
, MonadError MinioErr
|
||||||
|
, MonadThrow
|
||||||
|
, MonadBase IO
|
||||||
|
, MonadResource
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
-- MinioConn holds connection info and a connection pool
|
-- MinioConn holds connection info and a connection pool
|
||||||
data MinioConn = MinioConn {
|
data MinioConn = MinioConn {
|
||||||
mcConnInfo :: ConnectInfo
|
mcConnInfo :: ConnectInfo
|
||||||
@ -80,5 +97,5 @@ connect ci = do
|
|||||||
mgr <- NC.newManager defaultManagerSettings
|
mgr <- NC.newManager defaultManagerSettings
|
||||||
return $ MinioConn ci mgr
|
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
|
runMinio conn = runExceptT . flip runReaderT conn . unMinio
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user