From 51fc24892bf75d6f669b5c2f93e96843ace3e273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Hurlin?= Date: Thu, 22 Feb 2024 11:54:11 +0100 Subject: [PATCH] query stake-pools: add --output-[json,text] flag to control format of the output --- .../Cardano/CLI/EraBased/Commands/Query.hs | 1 + .../src/Cardano/CLI/EraBased/Options/Query.hs | 1 + .../src/Cardano/CLI/EraBased/Run/Query.hs | 25 ++++++++++++------- .../src/Cardano/CLI/Legacy/Commands/Query.hs | 1 + cardano-cli/src/Cardano/CLI/Legacy/Options.hs | 1 + 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Query.hs b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Query.hs index 2eb0e7d864..c794e1858f 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Query.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Query.hs @@ -101,6 +101,7 @@ data QueryStakePoolsCmdArgs = QueryStakePoolsCmdArgs , consensusModeParams :: !ConsensusModeParams , networkId :: !NetworkId , target :: !(Consensus.Target ChainPoint) + , format :: Maybe QueryOutputFormat , mOutFile :: !(Maybe (File () Out)) } deriving (Generic, Show) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Options/Query.hs b/cardano-cli/src/Cardano/CLI/EraBased/Options/Query.hs index 3c5b6514f3..f11cff0ddf 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Options/Query.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Options/Query.hs @@ -154,6 +154,7 @@ pQueryStakePoolsCmd era envCli = <*> pConsensusModeParams <*> pNetworkId envCli <*> pTarget era + <*> (optional $ pQueryOutputFormat "stake-pools") <*> pMaybeOutputFile pQueryStakeDistributionCmd :: CardanoEra era -> EnvCli -> Parser (QueryCmds era) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs index 739399836b..ff21fda71d 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs @@ -1126,6 +1126,7 @@ runQueryStakePoolsCmd , Cmd.consensusModeParams , Cmd.networkId , Cmd.target + , Cmd.format , Cmd.mOutFile } = do let localNodeConnInfo = LocalNodeConnectInfo consensusModeParams networkId nodeSocketPath @@ -1142,21 +1143,27 @@ runQueryStakePoolsCmd & onLeft (left . QueryCmdEraMismatch) pure $ do - writeStakePools mOutFile poolIds + writeStakePools (newOutputFormat format mOutFile) mOutFile poolIds ) & onLeft (left . QueryCmdAcquireFailure) & onLeft left writeStakePools - :: Maybe (File () Out) + :: QueryOutputFormat + -> Maybe (File () Out) -> Set PoolId -> ExceptT QueryCmdError IO () -writeStakePools (Just (File outFile)) stakePools = - handleIOExceptT (QueryCmdWriteFileError . FileIOError outFile) $ - LBS.writeFile outFile (encodePretty stakePools) - -writeStakePools Nothing stakePools = - forM_ (Set.toList stakePools) $ \poolId -> - liftIO . putStrLn $ Text.unpack (serialiseToBech32 poolId) +writeStakePools format mOutFile stakePools = + firstExceptT QueryCmdWriteFileError . newExceptT $ + writeLazyByteStringOutput mOutFile toWrite + where + toWrite :: LBS.ByteString = + case format of + QueryOutputFormatText -> + encodePretty stakePools + QueryOutputFormatJson -> + LBS.unlines + $ map (textToLazyBytestring . serialiseToBech32) + $ Set.toList stakePools runQueryStakeDistributionCmd :: () => Cmd.QueryStakeDistributionCmdArgs diff --git a/cardano-cli/src/Cardano/CLI/Legacy/Commands/Query.hs b/cardano-cli/src/Cardano/CLI/Legacy/Commands/Query.hs index 0c07c42165..73d8988a26 100644 --- a/cardano-cli/src/Cardano/CLI/Legacy/Commands/Query.hs +++ b/cardano-cli/src/Cardano/CLI/Legacy/Commands/Query.hs @@ -85,6 +85,7 @@ data LegacyQueryStakePoolsCmdArgs = LegacyQueryStakePoolsCmdArgs { nodeSocketPath :: !SocketPath , consensusModeParams :: !ConsensusModeParams , networkId :: !NetworkId + , format :: Maybe QueryOutputFormat , mOutFile :: !(Maybe (File () Out)) } deriving (Generic, Show) diff --git a/cardano-cli/src/Cardano/CLI/Legacy/Options.hs b/cardano-cli/src/Cardano/CLI/Legacy/Options.hs index 3a4f27e427..15fcd7866a 100644 --- a/cardano-cli/src/Cardano/CLI/Legacy/Options.hs +++ b/cardano-cli/src/Cardano/CLI/Legacy/Options.hs @@ -658,6 +658,7 @@ pQueryCmds envCli = <$> pSocketPath envCli <*> pConsensusModeParams <*> pNetworkId envCli + <*> (optional $ pQueryOutputFormat "stake-pools") <*> pMaybeOutputFile pQueryStakeDistribution :: Parser LegacyQueryCmds