Skip to content

Commit

Permalink
Example CustomCliException
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Feb 10, 2025
1 parent 29c77fa commit 930138f
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 29 deletions.
4 changes: 2 additions & 2 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ index-state:
packages:
cardano-cli

program-options
ghc-options: -Werror
-- program-options
-- ghc-options: -Werror

package cryptonite
-- Using RDRAND instead of /dev/urandom as an entropy source for key
Expand Down
16 changes: 14 additions & 2 deletions cardano-cli/src/Cardano/CLI/Compatible/Exception.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

module Cardano.CLI.Compatible.Exception
( CustomCliException (..)
, throwCliError
, fromEitherIOCli
)
where

Expand All @@ -21,8 +23,18 @@ data CustomCliException where
deriving instance Show CustomCliException

instance Exception CustomCliException where
displayException (CustomCliException e cs) =
displayException (CustomCliException e cStack) =
unlines
[ show (prettyError e)
, prettyCallStack cs
, prettyCallStack cStack
]

throwCliError :: MonadIO m => CustomCliException -> m a
throwCliError = throwIO

fromEitherIOCli :: (HasCallStack, MonadIO m, Show e, Typeable e, Error e) => IO (Either e a) -> m a
fromEitherIOCli action = do
result <- liftIO action
case result of
Left e -> throwCliError $ CustomCliException e callStack
Right a -> return a
7 changes: 1 addition & 6 deletions cardano-cli/src/Cardano/CLI/Compatible/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ where
import Cardano.Api

import Cardano.CLI.Compatible.Commands
import Cardano.CLI.Compatible.Exception
import Cardano.CLI.Compatible.Governance
import Cardano.CLI.Compatible.Transaction
import Cardano.CLI.Render
Expand Down Expand Up @@ -45,8 +44,4 @@ runCompatibleCommand (CompatibleGovernanceCmds govCmd) =
executeRio :: RIO () () -> IO ()
executeRio r = do
runRIO () r
`catch` ( \e ->
case fromException e of
Just custom@(CustomCliException{}) -> putStrLn $ displayException custom
Nothing -> putStrLn $ displayException e
)
`catch` (\(e :: SomeException) -> putStrLn $ displayException e)
26 changes: 13 additions & 13 deletions cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ import Cardano.Api.Compatible
import Cardano.Api.Ledger hiding (TxIn, VotingProcedures)
import Cardano.Api.Shelley hiding (VotingProcedures)

import Cardano.CLI.Compatible.Exception
import Cardano.CLI.Environment
import Cardano.CLI.EraBased.Options.Common hiding (pRefScriptFp, pTxOutDatum)
import Cardano.CLI.EraBased.Run.Transaction
import Cardano.CLI.EraBased.Script.Certificate.Read
import Cardano.CLI.EraBased.Script.Certificate.Types
import Cardano.CLI.EraBased.Script.Proposal.Types
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.EraBased.Script.Vote.Types (CliVoteScriptRequirements,
VoteScriptWitness (..))
import Cardano.CLI.Orphans ()
Expand All @@ -40,8 +40,6 @@ import Data.Foldable
import Data.Function
import qualified Data.Map.Strict as Map
import Data.Maybe
import Data.Text (Text)
import GHC.Exts (IsList (..))
import Options.Applicative
import qualified Options.Applicative as Opt

Expand Down Expand Up @@ -221,7 +219,8 @@ instance Error CompatibleTransactionError where
-- constraint here and to all those functions.
runCompatibleTransactionCmd
:: forall era
. CompatibleTransactionCmds era
. HasCallStack
=> CompatibleTransactionCmds era
-> RIO () ()
runCompatibleTransactionCmd
( CreateCompatibleSignedTransaction
Expand All @@ -238,12 +237,12 @@ runCompatibleTransactionCmd
outputFp
) =
shelleyBasedEraConstraints sbe $ do
sks <- mapM (fromEitherIO . readWitnessSigningData) witnesses
sks <- mapM (fromEitherIOCli . readWitnessSigningData) witnesses

allOuts <- fromEitherIO . runExceptT $ mapM (toTxOutInAnyEra sbe) outs
allOuts <- fromEitherIOCli . runExceptT $ mapM (toTxOutInAnyEra sbe) outs

certFilesAndMaybeScriptWits <-
fromEitherIO $
fromEitherIOCli $
runExceptT $
readCertificateScriptWitnesses sbe certificates

Expand All @@ -263,16 +262,17 @@ runCompatibleTransactionCmd
case mUpdateProposal of
Nothing -> return (NoPParamsUpdate sbe, NoVotes)
Just p -> do
pparamUpdate <- fromEitherIO $ runExceptT $ readUpdateProposalFile p
pparamUpdate <- fromEitherIOCli $ runExceptT $ readUpdateProposalFile p
return (pparamUpdate, NoVotes)
)
( \w ->
case mProposalProcedure of
Nothing -> return (NoPParamsUpdate sbe, NoVotes)
Just prop -> do
pparamUpdate <- fromEitherIO $ runExceptT $ readProposalProcedureFile prop
votesAndWits <- fromEitherIO (readVotingProceduresFiles w mVotes)
votingProcedures <- fromEither $ mkTxVotingProcedures votesAndWits
pparamUpdate <- fromEitherIOCli $ runExceptT $ readProposalProcedureFile prop
votesAndWits <- fromEitherIOCli (readVotingProceduresFiles w mVotes)
votingProcedures <-
fromEither $ mkTxVotingProcedures [(v, vswScriptWitness <$> mSwit) | (v, mSwit) <- votesAndWits]
return (pparamUpdate, VotingProcedures w votingProcedures)
)
sbe
Expand Down Expand Up @@ -300,7 +300,7 @@ runCompatibleTransactionCmd
validatedRefInputs <-
fromEither . first CompatibleTxCmdError . validateTxInsReference $
certsRefInputs <> votesRefInputs <> proposalsRefInputs
let txCerts = convertCertificates certsAndMaybeScriptWits
let txCerts = mkTxCertificates sbe certsAndMaybeScriptWits

-- this body is only for witnesses
apiTxBody <-
Expand All @@ -326,7 +326,7 @@ runCompatibleTransactionCmd
fromEither $
createCompatibleSignedTx sbe ins allOuts allKeyWits fee protocolUpdates votes txCerts

fromEitherIO $
fromEitherIOCli $
writeTxFileTextEnvelopeCddl sbe outputFp signedTx
where
validateTxInsReference
Expand Down
9 changes: 8 additions & 1 deletion cardano-cli/src/Cardano/CLI/Read.hs
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,14 @@ data ReadWitnessSigningDataError
ReadWitnessSigningDataSigningKeyAndAddressMismatch
deriving Show

instance Exception ReadWitnessSigningDataError
instance Error ReadWitnessSigningDataError where
prettyError = \case
ReadWitnessSigningDataSigningKeyDecodeError fileErr ->
prettyError fileErr
ReadWitnessSigningDataScriptError fileErr ->
prettyError fileErr
ReadWitnessSigningDataSigningKeyAndAddressMismatch ->
"Only a Byron signing key may be accompanied by a Byron address."

-- | Render an error message for a 'ReadWitnessSigningDataError'.
renderReadWitnessSigningDataError :: ReadWitnessSigningDataError -> Doc ann
Expand Down
3 changes: 1 addition & 2 deletions cardano-cli/src/Cardano/CLI/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,8 @@ import Cardano.CLI.Types.Errors.NodeCmdError
import Cardano.CLI.Types.Errors.QueryCmdError
import Cardano.Git.Rev (gitRev)

import Control.Monad (forM_)
import Data.Function
import qualified Data.List as L
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import Data.Version (showVersion)
Expand All @@ -53,6 +51,7 @@ import System.Info (arch, compilerName, compilerVersion, os)
import qualified System.IO as IO

import Paths_cardano_cli (version)
import RIO

data ClientCommandErrors
= ByronClientError ByronClientCmdError
Expand Down
6 changes: 3 additions & 3 deletions cardano-cli/src/Cardano/CLI/Types/Errors/TxCmdError.hs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import Cardano.CLI.Types.Output
import Cardano.CLI.Types.TxFeature
import qualified Cardano.Prelude as List

import Control.Monad.Catch (Exception)
import Data.Set (Set)
import Data.Text (Text)

Expand Down Expand Up @@ -96,11 +95,12 @@ data TxCmdError
| TxCmdHashCheckError L.Url HashCheckError
| TxCmdUnregisteredStakeAddress !(Set StakeCredential)

instance Exception TxCmdError

instance Show TxCmdError where
show = show . renderTxCmdError

instance Error TxCmdError where
prettyError = renderTxCmdError

renderTxCmdError :: TxCmdError -> Doc ann
renderTxCmdError = \case
TxCmdProtocolParamsConverstionError err' ->
Expand Down

0 comments on commit 930138f

Please sign in to comment.