utxorpc-server-0.0.2.0: src/Utxorpc/Query.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RankNTypes #-}
module Utxorpc.Query (QueryHandlers (..), serviceHandlers) where
import Control.Monad.IO.Class (MonadIO)
import Network.GRPC.HTTP2.ProtoLens (RPC (RPC))
import Network.GRPC.Server (ServerStreamHandler, ServiceHandler, UnaryHandler)
import Proto.Utxorpc.V1alpha.Query.Query
import Utxorpc.Logged (UtxorpcServiceLogger, loggedSStream, loggedUnary)
data QueryHandlers m a = QueryHandlers
{ readParams :: UnaryHandler m ReadParamsRequest ReadParamsResponse,
readUtxos :: UnaryHandler m ReadUtxosRequest ReadUtxosResponse,
searchUtxos :: UnaryHandler m SearchUtxosRequest SearchUtxosResponse,
streamUtxos :: ServerStreamHandler m ReadUtxosRequest ReadUtxosResponse a
}
serviceHandlers ::
(MonadIO m) =>
Maybe (UtxorpcServiceLogger m) ->
(forall x. m x -> IO x) ->
QueryHandlers m b ->
[ServiceHandler]
serviceHandlers logger f QueryHandlers {readParams, readUtxos, searchUtxos, streamUtxos } =
[readParamsSH, readUtxosSH, searchUtxosSH, streamUtxosSH ]
where
readParamsSH = loggedUnary f (RPC :: RPC QueryService "readParams") readParams logger
readUtxosSH = loggedUnary f (RPC :: RPC QueryService "readUtxos") readUtxos logger
searchUtxosSH = loggedUnary f (RPC :: RPC QueryService "searchUtxos") searchUtxos logger
streamUtxosSH = loggedSStream f (RPC :: RPC QueryService "streamUtxos") streamUtxos logger