-- | Node client support for the Cardano protocol
--
module Cardano.Api.Protocol.Cardano
  ( -- * Client support
    mkNodeClientProtocolCardano
  , mkSomeNodeClientProtocolCardano
  ) where

import           Cardano.Api.Protocol.Types (SomeNodeClientProtocol (..))
import           Cardano.Chain.Slotting (EpochSlots)
import           Ouroboros.Consensus.Cardano (ProtocolCardano,
                     ProtocolClient (ProtocolClientCardano))
import           Ouroboros.Consensus.Cardano.Block (CardanoBlock)
import           Ouroboros.Consensus.Shelley.Protocol (StandardCrypto)

mkNodeClientProtocolCardano :: EpochSlots
                            -> ProtocolClient (CardanoBlock StandardCrypto)
                                              ProtocolCardano
mkNodeClientProtocolCardano :: EpochSlots
-> ProtocolClient (CardanoBlock StandardCrypto) ProtocolCardano
mkNodeClientProtocolCardano = EpochSlots
-> ProtocolClient (CardanoBlock StandardCrypto) ProtocolCardano
ProtocolClientCardano

mkSomeNodeClientProtocolCardano :: EpochSlots
                                -> SomeNodeClientProtocol
mkSomeNodeClientProtocolCardano :: EpochSlots -> SomeNodeClientProtocol
mkSomeNodeClientProtocolCardano EpochSlots
epochSlots =
    ProtocolClient
  (CardanoBlock StandardCrypto)
  (BlockProtocol (CardanoBlock StandardCrypto))
-> SomeNodeClientProtocol
forall blk.
RunNode blk =>
ProtocolClient blk (BlockProtocol blk) -> SomeNodeClientProtocol
SomeNodeClientProtocol
      (EpochSlots
-> ProtocolClient (CardanoBlock StandardCrypto) ProtocolCardano
mkNodeClientProtocolCardano EpochSlots
epochSlots)