network-msgpack-rpc-0.0.6: src/Network/MessagePack/Server.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Network.MessagePack.Server (
-- * RPC method types
Method
, MethodType (..)
, MethodDocs (..)
, MethodVal (..)
, ServerT (..)
, Server
-- * Build a method
, method
, methodName
, methodDocs
-- * Start RPC server
, serve
, runServer
) where
import Control.Monad.Catch (MonadCatch)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Control.Monad.Trans (MonadIO)
import Control.Monad.Trans.Control (MonadBaseControl)
import Network.MessagePack.Protocol (protocolMethods)
import Network.MessagePack.Server.Basic
-- | Start RPC server with a set of RPC methods.
runServer
:: (MonadBaseControl IO m, MonadIO m, MonadCatch m, MonadUnliftIO m)
=> Int -- ^ Port number
-> [Method m] -- ^ list of methods
-> m ()
runServer port methods =
serve port (protocolMethods methods)