{-# LANGUAGE LambdaCase #-}
module Cardano.CLI.Type.Error.DebugCmdError
( DebugCmdError (..)
)
where
import Cardano.Api
import Cardano.Api.Byron qualified as Byron
import Cardano.CLI.Type.Error.TxCmdError
import Data.Text (Text)
import Data.Text.Lazy.Builder qualified as Text
import Formatting.Buildable (build)
data DebugCmdError
= DebugCmdFailed
|
DebugNodeConfigGenesisDataCmdError !FilePath !Byron.GenesisDataError
|
DebugNodeConfigWrongGenesisHashCmdError
!FilePath
!FilePath
!Text
!Text
|
DebugNodeConfigNoConwayFileCmdError
!FilePath
|
DebugNodeConfigNoConwayHashCmdError
!FilePath
| DebugTxCmdError !TxCmdError
deriving Int -> DebugCmdError -> ShowS
[DebugCmdError] -> ShowS
DebugCmdError -> String
(Int -> DebugCmdError -> ShowS)
-> (DebugCmdError -> String)
-> ([DebugCmdError] -> ShowS)
-> Show DebugCmdError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DebugCmdError -> ShowS
showsPrec :: Int -> DebugCmdError -> ShowS
$cshow :: DebugCmdError -> String
show :: DebugCmdError -> String
$cshowList :: [DebugCmdError] -> ShowS
showList :: [DebugCmdError] -> ShowS
Show
instance Error DebugCmdError where
prettyError :: forall ann. DebugCmdError -> Doc ann
prettyError = \case
DebugCmdError
DebugCmdFailed -> Doc ann
"Debug command failed"
DebugNodeConfigGenesisDataCmdError String
fp GenesisDataError
err ->
Doc ann
"Error reading node configuration at: "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
fp
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
": "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty (Builder -> Text
Text.toLazyText (Builder -> Text) -> Builder -> Text
forall a b. (a -> b) -> a -> b
$ GenesisDataError -> Builder
forall p. Buildable p => p -> Builder
build GenesisDataError
err)
DebugNodeConfigNoConwayFileCmdError String
fp ->
Doc ann
"Conway genesis file not specified in "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
fp
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
". Please add a \"ConwayGenesisFile\" key to the file at "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
fp
DebugNodeConfigNoConwayHashCmdError String
fp ->
Doc ann
"Conway genesis hash not specified in "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
fp
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
". Please add a \"ConwayGenesisHash\" key to the file at "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
fp
DebugNodeConfigWrongGenesisHashCmdError String
nodeFp String
genesisFp Text
actualHash Text
expectedHash ->
Doc ann
"Wrong genesis hash for "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
genesisFp
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
" in "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
nodeFp
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
": when computing the hash, got: "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty Text
actualHash
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
", but the node configuration files states that this hash is expected: "
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty Text
expectedHash
DebugTxCmdError TxCmdError
err -> TxCmdError -> Doc ann
forall ann. TxCmdError -> Doc ann
renderTxCmdError TxCmdError
err