module Cardano.CLI.Type.Error.NodeNetworkIdMismatchError
  ( NodeNetworkIdMismatchError (..)
  )
where

import Cardano.Api

data NodeNetworkIdMismatchError = NodeNetworkIdMismatchError
  { NodeNetworkIdMismatchError -> NetworkId
cliNetworkId :: !NetworkId
  , NodeNetworkIdMismatchError -> NetworkId
nodeNetworkId :: !NetworkId
  }
  deriving Int -> NodeNetworkIdMismatchError -> ShowS
[NodeNetworkIdMismatchError] -> ShowS
NodeNetworkIdMismatchError -> String
(Int -> NodeNetworkIdMismatchError -> ShowS)
-> (NodeNetworkIdMismatchError -> String)
-> ([NodeNetworkIdMismatchError] -> ShowS)
-> Show NodeNetworkIdMismatchError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NodeNetworkIdMismatchError -> ShowS
showsPrec :: Int -> NodeNetworkIdMismatchError -> ShowS
$cshow :: NodeNetworkIdMismatchError -> String
show :: NodeNetworkIdMismatchError -> String
$cshowList :: [NodeNetworkIdMismatchError] -> ShowS
showList :: [NodeNetworkIdMismatchError] -> ShowS
Show

instance Error NodeNetworkIdMismatchError where
  prettyError :: forall ann. NodeNetworkIdMismatchError -> Doc ann
prettyError (NodeNetworkIdMismatchError NetworkId
cli NetworkId
node) =
    [Doc ann] -> Doc ann
forall a. Monoid a => [a] -> a
mconcat
      [ Doc ann
"The network id given to the command does not match the network of the node: "
      , Doc ann
"the command was given "
      , NetworkId -> Doc ann
forall ann. NetworkId -> Doc ann
renderNetworkId NetworkId
cli
      , Doc ann
", but the node is on "
      , NetworkId -> Doc ann
forall ann. NetworkId -> Doc ann
renderNetworkId NetworkId
node
      , Doc ann
".\n"
      , Doc ann
"Specify "
      , NetworkId -> Doc ann
forall ann. NetworkId -> Doc ann
renderNetworkIdFlag NetworkId
node
      , Doc ann
" (or set the CARDANO_NODE_NETWORK_ID environment variable accordingly), "
      , Doc ann
"or connect to a node on the expected network."
      ]
   where
    renderNetworkId :: NetworkId -> Doc ann
    renderNetworkId :: forall ann. NetworkId -> Doc ann
renderNetworkId NetworkId
Mainnet = Doc ann
"mainnet"
    renderNetworkId (Testnet (NetworkMagic Word32
magic)) =
      Doc ann
"a testnet with network magic " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word32 -> Doc ann
forall ann. Word32 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word32
magic

    renderNetworkIdFlag :: NetworkId -> Doc ann
    renderNetworkIdFlag :: forall ann. NetworkId -> Doc ann
renderNetworkIdFlag NetworkId
Mainnet = Doc ann
"--mainnet"
    renderNetworkIdFlag (Testnet (NetworkMagic Word32
magic)) =
      Doc ann
"--testnet-magic " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word32 -> Doc ann
forall ann. Word32 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word32
magic