Skip to content

Commit

Permalink
Factor out readAndDecodeShelleyGenesis
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Dec 24, 2021
1 parent add1b9d commit 24f63a0
Showing 1 changed file with 25 additions and 6 deletions.
31 changes: 25 additions & 6 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

module Cardano.CLI.Shelley.Run.Genesis
( ShelleyGenesisCmdError(..)
, ShelleyGenesisReadError(..)
, readShelleyGenesis
, readAndDecodeShelleyGenesis
, readAlonzoGenesis
, renderShelleyGenesisCmdError
, runGenesisCmd
Expand Down Expand Up @@ -97,8 +99,10 @@ data ShelleyGenesisCmdError
| ShelleyGenesisCmdPoolCmdError !ShelleyPoolCmdError
| ShelleyGenesisCmdStakeAddressCmdError !ShelleyStakeAddressCmdError
| ShelleyGenesisCmdCostModelsError !FilePath
| ShelleyGenesisCmdReadError !ShelleyGenesisReadError
deriving Show

-- TODO: This should be an instance of Error
renderShelleyGenesisCmdError :: ShelleyGenesisCmdError -> Text
renderShelleyGenesisCmdError err =
case err of
Expand Down Expand Up @@ -133,6 +137,7 @@ renderShelleyGenesisCmdError err =
ShelleyGenesisCmdStakeAddressCmdError e -> renderShelleyStakeAddressCmdError e
ShelleyGenesisCmdCostModelsError fp ->
"Cost model is invalid: " <> Text.pack fp
ShelleyGenesisCmdReadError genReadError -> Text.pack $ displayError genReadError

runGenesisCmd :: GenesisCmd -> ExceptT ShelleyGenesisCmdError IO ()
runGenesisCmd (GenesisKeyGenGenesis vk sk) = runGenesisKeyGenGenesis vk sk
Expand Down Expand Up @@ -695,18 +700,13 @@ readShelleyGenesis
-> (ShelleyGenesis StandardShelley -> ShelleyGenesis StandardShelley)
-> ExceptT ShelleyGenesisCmdError IO (ShelleyGenesis StandardShelley)
readShelleyGenesis fpath adjustDefaults = do
readAndDecode
(firstExceptT ShelleyGenesisCmdReadError . newExceptT $ readAndDecodeShelleyGenesis fpath)
`catchError` \err ->
case err of
ShelleyGenesisCmdGenesisFileError (FileIOError _ ioe)
| isDoesNotExistError ioe -> writeDefault
_ -> left err
where
readAndDecode = do
lbs <- handleIOExceptT (ShelleyGenesisCmdGenesisFileError . FileIOError fpath) $ LBS.readFile fpath
firstExceptT (ShelleyGenesisCmdAesonDecodeError fpath . Text.pack)
. hoistEither $ Aeson.eitherDecode' lbs

defaults :: ShelleyGenesis StandardShelley
defaults = adjustDefaults shelleyGenesisDefaults

Expand All @@ -715,6 +715,25 @@ readShelleyGenesis fpath adjustDefaults = do
LBS.writeFile fpath (encodePretty defaults)
return defaults

instance Error ShelleyGenesisReadError where
displayError (ShelleyGenesisReadError fe) = displayError fe
displayError (ShelleyGenesisDecodeError fp err) =
"Error while decoding Shelley genesis at: " <> fp <>
" Error: " <> Text.unpack err


data ShelleyGenesisReadError = ShelleyGenesisReadError !(FileError IOException)
| ShelleyGenesisDecodeError !FilePath !Text
deriving Show

readAndDecodeShelleyGenesis
:: FilePath
-> IO (Either ShelleyGenesisReadError (ShelleyGenesis StandardShelley))
readAndDecodeShelleyGenesis fpath = runExceptT $ do
lbs <- handleIOExceptT (ShelleyGenesisReadError . FileIOError fpath) $ LBS.readFile fpath
firstExceptT (ShelleyGenesisDecodeError fpath . Text.pack)
. hoistEither $ Aeson.eitherDecode' lbs

updateTemplate
:: SystemStart
-- Genesis delegation (not stake-based):
Expand Down

0 comments on commit 24f63a0

Please sign in to comment.