module Network.GRPC.Server (
mkGrpcServer
, ServerParams(..)
, RequestHandler
, ContentType(..)
, Call
, RpcHandler
, mkRpcHandler
, mkRpcHandlerNoDefMetadata
, hoistRpcHandler
, SomeRpcHandler
, someRpcHandler
, hoistSomeRpcHandler
, recvInput
, sendOutput
, sendGrpcException
, getRequestMetadata
, setResponseInitialMetadata
, sendNextOutput
, sendFinalOutput
, sendTrailers
, recvNextInputElem
, recvNextInput
, recvFinalInput
, recvEndOfInput
, initiateResponse
, sendTrailersOnly
, recvInputWithMeta
, sendOutputWithMeta
, getRequestHeaders
, CallSetupFailure(..)
, ClientDisconnected(..)
, HandlerTerminated(..)
, ResponseAlreadyInitiated(..)
) where
import Network.HTTP2.Server qualified as HTTP2
import Network.GRPC.Server.Call
import Network.GRPC.Server.Context
import Network.GRPC.Server.Handler
import Network.GRPC.Server.HandlerMap (HandlerMap)
import Network.GRPC.Server.HandlerMap qualified as HandlerMap
import Network.GRPC.Server.RequestHandler
import Network.GRPC.Server.Session (CallSetupFailure(..))
import Network.GRPC.Spec
import Network.GRPC.Util.HTTP2.Stream (ClientDisconnected(..))
mkGrpcServer :: ServerParams -> [SomeRpcHandler IO] -> IO HTTP2.Server
mkGrpcServer :: ServerParams -> [SomeRpcHandler IO] -> IO Server
mkGrpcServer params :: ServerParams
params@ServerParams{RequestHandler () -> RequestHandler ()
serverTopLevel :: RequestHandler () -> RequestHandler ()
serverTopLevel :: ServerParams -> RequestHandler () -> RequestHandler ()
serverTopLevel} [SomeRpcHandler IO]
handlers = do
ctxt <- ServerParams -> IO ServerContext
newServerContext ServerParams
params
return $
requestHandlerToServer
$ serverTopLevel
$ requestHandler handlerMap ctxt
where
handlerMap :: HandlerMap IO
handlerMap :: HandlerMap IO
handlerMap = [SomeRpcHandler IO] -> HandlerMap IO
forall (m :: * -> *). [SomeRpcHandler m] -> HandlerMap m
HandlerMap.fromList [SomeRpcHandler IO]
handlers