{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Cardano.CLI.Compatible.Run
  ( runAnyCompatibleCommand
  , runCompatibleCommand
  )
where

import Cardano.CLI.Compatible.Command
import Cardano.CLI.Compatible.Exception
import Cardano.CLI.Compatible.Governance.Run
import Cardano.CLI.Compatible.StakeAddress.Run
import Cardano.CLI.Compatible.StakePool.Run
import Cardano.CLI.Compatible.Transaction.Run

import Data.Typeable (Typeable)

runAnyCompatibleCommand :: AnyCompatibleCommand -> CIO e ()
runAnyCompatibleCommand :: forall e. AnyCompatibleCommand -> CIO e ()
runAnyCompatibleCommand (AnyCompatibleCommand CompatibleCommand era
cmd) = CompatibleCommand era -> CIO e ()
forall era e. Typeable era => CompatibleCommand era -> CIO e ()
runCompatibleCommand CompatibleCommand era
cmd

runCompatibleCommand :: Typeable era => CompatibleCommand era -> CIO e ()
runCompatibleCommand :: forall era e. Typeable era => CompatibleCommand era -> CIO e ()
runCompatibleCommand = \case
  CompatibleTransactionCmds CompatibleTransactionCmds era
txCmd ->
    CompatibleTransactionCmds era -> CIO e ()
forall era e. CompatibleTransactionCmds era -> CIO e ()
runCompatibleTransactionCmd CompatibleTransactionCmds era
txCmd
  CompatibleGovernanceCmds CompatibleGovernanceCmds era
govCmd ->
    CompatibleGovernanceCmds era -> CIO e ()
forall era e.
Typeable era =>
CompatibleGovernanceCmds era -> CIO e ()
runCompatibleGovernanceCmds CompatibleGovernanceCmds era
govCmd
  CompatibleStakeAddressCmds CompatibleStakeAddressCmds era
stakeAddressCmd ->
    CompatibleStakeAddressCmds era -> CIO e ()
forall era e. CompatibleStakeAddressCmds era -> CIO e ()
runCompatibleStakeAddressCmds CompatibleStakeAddressCmds era
stakeAddressCmd
  CompatibleStakePoolCmds CompatibleStakePoolCmds era
stakePoolCmd ->
    CompatibleStakePoolCmds era -> CIO e ()
forall era e. CompatibleStakePoolCmds era -> CIO e ()
runCompatibleStakePoolCmds CompatibleStakePoolCmds era
stakePoolCmd