module Network.MessagePack.Client.Basic (
Client
, ClientT
, execClient
, call
, RpcError (..)
, RpcType (..)
) where
import Control.Monad.Catch (MonadThrow, throwM)
import qualified Control.Monad.State.Strict as CMS
import qualified Data.ByteString as S
import Data.Conduit (($$+))
import Data.Conduit.Network (appSink, appSource,
clientSettings,
runTCPClient)
import Data.MessagePack (MessagePack, Object,
fromObject, toObject)
import qualified Data.MessagePack.Types.Result as R
import Data.Text (Text)
import qualified Data.Text as T
import Network.MessagePack.Client.Internal
import Network.MessagePack.Types.Client
import Network.MessagePack.Types.Error
execClient :: S.ByteString -> Int -> Client a -> IO a
execClient host port client =
runTCPClient (clientSettings port host) $ \ad -> do
(rsrc, _) <- appSource ad $$+ return ()
CMS.evalStateT (runClientT client) Connection
{ connSource = rsrc
, connSink = appSink ad
, connMsgId = 0
, connMths = []
}