/
Run.hs
85 lines (77 loc) · 3.92 KB
/
Run.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
module Cardano.CLI.Shelley.Run
( ShelleyClientCmdError
, renderShelleyClientCmdError
, runShelleyClientCommand
) where
import Cardano.Api
import Cardano.CLI.Shelley.Parsers
import Cardano.CLI.Shelley.Run.Address
import Cardano.CLI.Shelley.Run.Genesis
import Cardano.CLI.Shelley.Run.Governance
import Cardano.CLI.Shelley.Run.Key
import Cardano.CLI.Shelley.Run.Node
import Cardano.CLI.Shelley.Run.Pool
import Cardano.CLI.Shelley.Run.Query
import Cardano.CLI.Shelley.Run.StakeAddress
import Cardano.CLI.Shelley.Run.TextView
import Cardano.CLI.Shelley.Run.Transaction
import Control.Monad.Trans.Except (ExceptT)
import Control.Monad.Trans.Except.Extra (firstExceptT)
import Data.Text (Text)
import qualified Data.Text as Text
data ShelleyClientCmdError
= ShelleyCmdAddressError !ShelleyAddressCmdError
| ShelleyCmdGenesisError !ShelleyGenesisCmdError
| ShelleyCmdGovernanceError !ShelleyGovernanceCmdError
| ShelleyCmdNodeError !ShelleyNodeCmdError
| ShelleyCmdPoolError !ShelleyPoolCmdError
| ShelleyCmdStakeAddressError !ShelleyStakeAddressCmdError
| ShelleyCmdTextViewError !ShelleyTextViewFileError
| ShelleyCmdTransactionError !ShelleyTxCmdError
| ShelleyCmdQueryError !ShelleyQueryCmdError
| ShelleyCmdKeyError !ShelleyKeyCmdError
renderShelleyClientCmdError :: ShelleyCommand -> ShelleyClientCmdError -> Text
renderShelleyClientCmdError cmd err =
case err of
ShelleyCmdAddressError addrCmdErr ->
renderError cmd renderShelleyAddressCmdError addrCmdErr
ShelleyCmdGenesisError genesisCmdErr ->
renderError cmd (Text.pack . displayError) genesisCmdErr
ShelleyCmdGovernanceError govCmdErr ->
renderError cmd renderShelleyGovernanceError govCmdErr
ShelleyCmdNodeError nodeCmdErr ->
renderError cmd renderShelleyNodeCmdError nodeCmdErr
ShelleyCmdPoolError poolCmdErr ->
renderError cmd renderShelleyPoolCmdError poolCmdErr
ShelleyCmdStakeAddressError stakeAddrCmdErr ->
renderError cmd renderShelleyStakeAddressCmdError stakeAddrCmdErr
ShelleyCmdTextViewError txtViewErr ->
renderError cmd renderShelleyTextViewFileError txtViewErr
ShelleyCmdTransactionError txErr ->
renderError cmd renderShelleyTxCmdError txErr
ShelleyCmdQueryError queryErr ->
renderError cmd renderShelleyQueryCmdError queryErr
ShelleyCmdKeyError keyErr ->
renderError cmd renderShelleyKeyCmdError keyErr
where
renderError :: ShelleyCommand -> (a -> Text) -> a -> Text
renderError shelleyCmd renderer shelCliCmdErr =
mconcat [ "Command failed: "
, renderShelleyCommand shelleyCmd
, " Error: "
, renderer shelCliCmdErr
]
--
-- CLI shelley command dispatch
--
runShelleyClientCommand :: ShelleyCommand -> ExceptT ShelleyClientCmdError IO ()
runShelleyClientCommand (AddressCmd cmd) = firstExceptT ShelleyCmdAddressError $ runAddressCmd cmd
runShelleyClientCommand (StakeAddressCmd cmd) = firstExceptT ShelleyCmdStakeAddressError $ runStakeAddressCmd cmd
runShelleyClientCommand (KeyCmd cmd) = firstExceptT ShelleyCmdKeyError $ runKeyCmd cmd
runShelleyClientCommand (TransactionCmd cmd) = firstExceptT ShelleyCmdTransactionError $ runTransactionCmd cmd
runShelleyClientCommand (NodeCmd cmd) = firstExceptT ShelleyCmdNodeError $ runNodeCmd cmd
runShelleyClientCommand (PoolCmd cmd) = firstExceptT ShelleyCmdPoolError $ runPoolCmd cmd
runShelleyClientCommand (QueryCmd cmd) = firstExceptT ShelleyCmdQueryError $ runQueryCmd cmd
runShelleyClientCommand (GovernanceCmd cmd) = firstExceptT ShelleyCmdGovernanceError $ runGovernanceCmd cmd
runShelleyClientCommand (GenesisCmd cmd) = firstExceptT ShelleyCmdGenesisError $ runGenesisCmd cmd
runShelleyClientCommand (TextViewCmd cmd) = firstExceptT ShelleyCmdTextViewError $ runTextViewCmd cmd