packages feed

utxorpc-server-0.0.1.0: src/Utxorpc/Watch.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RankNTypes #-}

module Utxorpc.Watch (WatchHandlers (..), serviceHandlers) where

import Control.Monad.IO.Class (MonadIO)
import Network.GRPC.HTTP2.ProtoLens (RPC (RPC))
import Network.GRPC.Server (ServerStreamHandler, ServiceHandler)
import Proto.Utxorpc.V1alpha.Watch.Watch
import Utxorpc.Logged (UtxorpcServiceLogger, loggedSStream)

newtype WatchHandlers m a = WatchHandlers
  { watchTx :: ServerStreamHandler m WatchTxRequest WatchTxResponse a
  }

serviceHandlers ::
  (MonadIO m) =>
  Maybe (UtxorpcServiceLogger m) ->
  (forall x. m x -> IO x) ->
  WatchHandlers m b ->
  [ServiceHandler]
serviceHandlers logger f WatchHandlers {watchTx} =
  [watchTxSH]
  where
    watchTxSH = loggedSStream f (RPC :: RPC WatchService "watchTx") watchTx logger