Skip to content

Commit 5b28631

Browse files
authored
Merge pull request #5046 from input-output-hk/newhoggy/move-parsers-to-reusable-location
Move parsers to reusable location
2 parents b475003 + 19f6a1f commit 5b28631

File tree

7 files changed

+93
-153
lines changed

7 files changed

+93
-153
lines changed

cardano-cli/cardano-cli.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ library
6868
Cardano.CLI.Byron.UpdateProposal
6969
Cardano.CLI.Byron.Vote
7070

71+
Cardano.CLI.Common.Parsers
7172
Cardano.CLI.Pretty
7273
Cardano.CLI.IO.Lazy
7374

cardano-cli/src/Cardano/CLI/Byron/Parsers.hs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import Cardano.CLI.Byron.Commands
6666
import Cardano.CLI.Byron.Genesis
6767
import Cardano.CLI.Byron.Key
6868
import Cardano.CLI.Byron.Tx
69+
import Cardano.CLI.Common.Parsers (pNetworkId)
6970
import Cardano.CLI.Run (ClientCommand (ByronCommand))
7071
import Cardano.CLI.Shelley.Commands (ByronKeyFormat (..))
7172
import Cardano.CLI.Types
@@ -651,25 +652,6 @@ parseFractionWithDefault optname desc w =
651652
<> value w
652653
)
653654

654-
pNetworkId :: Parser NetworkId
655-
pNetworkId =
656-
pMainnet' <|> fmap Testnet pTestnetMagic
657-
where
658-
pMainnet' :: Parser NetworkId
659-
pMainnet' =
660-
Opt.flag' Mainnet
661-
( Opt.long "mainnet"
662-
<> Opt.help "Use the mainnet magic id."
663-
)
664-
665-
pTestnetMagic :: Parser NetworkMagic
666-
pTestnetMagic =
667-
fmap NetworkMagic $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
668-
[ Opt.long "testnet-magic"
669-
, Opt.metavar "NATURAL"
670-
, Opt.help "Specify a testnet magic id."
671-
]
672-
673655
parseNewSigningKeyFile :: String -> Parser NewSigningKeyFile
674656
parseNewSigningKeyFile opt =
675657
NewSigningKeyFile
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
module Cardano.CLI.Common.Parsers
2+
( pNetworkId
3+
, pConsensusModeParams
4+
) where
5+
6+
import Cardano.Api (AnyConsensusModeParams (..), ConsensusModeParams (..),
7+
EpochSlots (..), NetworkId (..), NetworkMagic (..), bounded)
8+
9+
import Data.Foldable
10+
import Data.Word (Word64)
11+
import Options.Applicative (Parser)
12+
import qualified Options.Applicative as Opt
13+
14+
pNetworkId :: Parser NetworkId
15+
pNetworkId = asum
16+
[ Opt.flag' Mainnet $ mconcat
17+
[ Opt.long "mainnet"
18+
, Opt.help "Use the mainnet magic id."
19+
]
20+
, fmap (Testnet . NetworkMagic) $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
21+
[ Opt.long "testnet-magic"
22+
, Opt.metavar "NATURAL"
23+
, Opt.help "Specify a testnet magic id."
24+
]
25+
]
26+
27+
pConsensusModeParams :: Parser AnyConsensusModeParams
28+
pConsensusModeParams = asum
29+
[ pShelleyMode *> pShelleyConsensusMode
30+
, pByronMode *> pByronConsensusMode
31+
, pCardanoMode *> pCardanoConsensusMode
32+
, pDefaultConsensusMode
33+
]
34+
where
35+
pShelleyMode :: Parser ()
36+
pShelleyMode =
37+
Opt.flag' () $ mconcat
38+
[ Opt.long "shelley-mode"
39+
, Opt.help "For talking to a node running in Shelley-only mode."
40+
]
41+
42+
pByronMode :: Parser ()
43+
pByronMode =
44+
Opt.flag' () $ mconcat
45+
[ Opt.long "byron-mode"
46+
, Opt.help "For talking to a node running in Byron-only mode."
47+
]
48+
49+
pCardanoMode :: Parser ()
50+
pCardanoMode =
51+
Opt.flag' () $ mconcat
52+
[ Opt.long "cardano-mode"
53+
, Opt.help "For talking to a node running in full Cardano mode (default)."
54+
]
55+
56+
pCardanoConsensusMode :: Parser AnyConsensusModeParams
57+
pCardanoConsensusMode = AnyConsensusModeParams . CardanoModeParams <$> pEpochSlots
58+
59+
pByronConsensusMode :: Parser AnyConsensusModeParams
60+
pByronConsensusMode = AnyConsensusModeParams . ByronModeParams <$> pEpochSlots
61+
62+
pShelleyConsensusMode :: Parser AnyConsensusModeParams
63+
pShelleyConsensusMode = pure (AnyConsensusModeParams ShelleyModeParams)
64+
65+
pDefaultConsensusMode :: Parser AnyConsensusModeParams
66+
pDefaultConsensusMode =
67+
pure . AnyConsensusModeParams . CardanoModeParams $ EpochSlots defaultByronEpochSlots
68+
69+
defaultByronEpochSlots :: Word64
70+
defaultByronEpochSlots = 21600
71+
72+
pEpochSlots :: Parser EpochSlots
73+
pEpochSlots =
74+
fmap EpochSlots $ Opt.option (bounded "SLOTS") $ mconcat
75+
[ Opt.long "epoch-slots"
76+
, Opt.metavar "SLOTS"
77+
, Opt.help "The number of slots per epoch for the Byron era."
78+
, Opt.value defaultByronEpochSlots -- Default to the mainnet value.
79+
, Opt.showDefault
80+
]

cardano-cli/src/Cardano/CLI/Parsers.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
module Cardano.CLI.Parsers
77
( opts
88
, pref
9+
, pConsensusModeParams
10+
, pNetworkId
911
) where
1012

1113
import Cardano.CLI.Byron.Parsers (backwardsCompatibilityCommands, parseByronCommands)
14+
import Cardano.CLI.Common.Parsers (pConsensusModeParams, pNetworkId)
1215
import Cardano.CLI.Ping (parsePingCmd)
1316
import Cardano.CLI.Render (customRenderHelp)
1417
import Cardano.CLI.Run (ClientCommand (..))

cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs

Lines changed: 2 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ import Cardano.Api
5757
import Cardano.Api.Shelley
5858

5959
import Cardano.Chain.Common (BlockCount (BlockCount))
60+
61+
import Cardano.CLI.Common.Parsers (pConsensusModeParams, pNetworkId)
6062
import Cardano.CLI.Shelley.Commands
6163
import Cardano.CLI.Shelley.Key (PaymentVerifier (..), StakeIdentifier (..),
6264
StakeVerifier (..), VerificationKeyOrFile (..), VerificationKeyOrHashOrFile (..),
@@ -2051,25 +2053,6 @@ pKesVerificationKeyFile =
20512053
)
20522054
)
20532055

2054-
pNetworkId :: Parser NetworkId
2055-
pNetworkId =
2056-
pMainnet <|> fmap Testnet pTestnetMagic
2057-
where
2058-
pMainnet :: Parser NetworkId
2059-
pMainnet =
2060-
Opt.flag' Mainnet
2061-
( Opt.long "mainnet"
2062-
<> Opt.help "Use the mainnet magic id."
2063-
)
2064-
2065-
pTestnetMagic :: Parser NetworkMagic
2066-
pTestnetMagic =
2067-
fmap NetworkMagic $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
2068-
[ Opt.long "testnet-magic"
2069-
, Opt.metavar "TESTNET_MAGIC"
2070-
, Opt.help "Specify a testnet magic id."
2071-
]
2072-
20732056
pTxSubmitFile :: Parser FilePath
20742057
pTxSubmitFile =
20752058
Opt.strOption
@@ -3226,44 +3209,6 @@ pMaxCollateralInputs =
32263209
]
32273210
]
32283211

3229-
pConsensusModeParams :: Parser AnyConsensusModeParams
3230-
pConsensusModeParams = asum
3231-
[ Opt.flag' (AnyConsensusModeParams ShelleyModeParams)
3232-
( Opt.long "shelley-mode"
3233-
<> Opt.help "For talking to a node running in Shelley-only mode."
3234-
)
3235-
, Opt.flag' ()
3236-
( Opt.long "byron-mode"
3237-
<> Opt.help "For talking to a node running in Byron-only mode."
3238-
)
3239-
*> pByronConsensusMode
3240-
, Opt.flag' ()
3241-
( Opt.long "cardano-mode"
3242-
<> Opt.help "For talking to a node running in full Cardano mode (default)."
3243-
)
3244-
*> pCardanoConsensusMode
3245-
, -- Default to the Cardano consensus mode.
3246-
pure . AnyConsensusModeParams . CardanoModeParams $ EpochSlots defaultByronEpochSlots
3247-
]
3248-
where
3249-
pCardanoConsensusMode :: Parser AnyConsensusModeParams
3250-
pCardanoConsensusMode = AnyConsensusModeParams . CardanoModeParams <$> pEpochSlots
3251-
pByronConsensusMode :: Parser AnyConsensusModeParams
3252-
pByronConsensusMode = AnyConsensusModeParams . ByronModeParams <$> pEpochSlots
3253-
3254-
defaultByronEpochSlots :: Word64
3255-
defaultByronEpochSlots = 21600
3256-
3257-
pEpochSlots :: Parser EpochSlots
3258-
pEpochSlots =
3259-
fmap EpochSlots $ Opt.option (bounded "SLOTS") $ mconcat
3260-
[ Opt.long "epoch-slots"
3261-
, Opt.metavar "SLOTS"
3262-
, Opt.help "The number of slots per epoch for the Byron era."
3263-
, Opt.value defaultByronEpochSlots -- Default to the mainnet value.
3264-
, Opt.showDefault
3265-
]
3266-
32673212
pProtocolVersion :: Parser (Natural, Natural)
32683213
pProtocolVersion =
32693214
(,) <$> pProtocolMajorVersion <*> pProtocolMinorVersion

cardano-submit-api/cardano-submit-api.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ library
4040
, bytestring
4141
, cardano-api
4242
, cardano-binary
43+
, cardano-cli
4344
, cardano-crypto-class ^>= 2.0
4445
, cardano-ledger-byron ^>= 0.1
4546
, formatting

cardano-submit-api/src/Cardano/TxSubmit/CLI/Parsers.hs

Lines changed: 5 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@ module Cardano.TxSubmit.CLI.Parsers
44
( opts
55
, pTxSubmitNodeParams
66
, pConfigFile
7-
, pNetworkId
8-
, pProtocol
97
, pSocketPath
108
) where
119

12-
import Cardano.Api (AnyConsensusModeParams (..), ConsensusModeParams (..),
13-
EpochSlots (..), NetworkId (..), NetworkMagic (..), SocketPath (..), bounded)
10+
import Cardano.Api (SocketPath (..))
11+
12+
import Cardano.CLI.Parsers (pConsensusModeParams, pNetworkId)
1413

1514
import Cardano.TxSubmit.CLI.Types (ConfigFile (..), TxSubmitNodeParams (..))
1615
import Cardano.TxSubmit.Rest.Parsers (pWebserverConfig)
1716

18-
import Control.Applicative (Alternative (..), (<**>))
19-
import Data.Word (Word64)
17+
import Control.Applicative ((<**>))
2018
import Options.Applicative (Parser, ParserInfo)
2119

2220
import qualified Options.Applicative as Opt
@@ -30,7 +28,7 @@ opts = Opt.info (pTxSubmitNodeParams <**> Opt.helper)
3028
pTxSubmitNodeParams :: Parser TxSubmitNodeParams
3129
pTxSubmitNodeParams = TxSubmitNodeParams
3230
<$> pConfigFile
33-
<*> pProtocol
31+
<*> pConsensusModeParams
3432
<*> pNetworkId
3533
<*> pSocketPath
3634
<*> pWebserverConfig 8090
@@ -44,76 +42,6 @@ pConfigFile = ConfigFile <$> Opt.strOption
4442
<> Opt.metavar "FILEPATH"
4543
)
4644

47-
-- TODO: This was ripped from `cardano-cli` because, unfortunately, it's not
48-
-- exported. Once we export this parser from the appropriate module and update
49-
-- our `cardano-cli` dependency, we should remove this and import the parser
50-
-- from there.
51-
pNetworkId :: Parser NetworkId
52-
pNetworkId = pMainnet <|> fmap Testnet pTestnetMagic
53-
where
54-
pMainnet :: Parser NetworkId
55-
pMainnet = Opt.flag' Mainnet
56-
( Opt.long "mainnet"
57-
<> Opt.help "Use the mainnet magic id."
58-
)
59-
60-
pTestnetMagic :: Parser NetworkMagic
61-
pTestnetMagic =
62-
fmap NetworkMagic $ Opt.option (bounded "TESTNET_MAGIC") $ mconcat
63-
[ Opt.long "testnet-magic"
64-
, Opt.metavar "TESTNET_MAGIC"
65-
, Opt.help "Specify a testnet magic id."
66-
]
67-
68-
69-
-- TODO: This was ripped from `cardano-cli` because, unfortunately, it's not
70-
-- exported. Once we export this parser from the appropriate module and update
71-
-- our `cardano-cli` dependency, we should remove this and import the parser
72-
-- from there.
73-
pProtocol :: Parser AnyConsensusModeParams
74-
pProtocol =
75-
( Opt.flag' ()
76-
( Opt.long "shelley-mode"
77-
<> Opt.help "For talking to a node running in Shelley-only mode."
78-
)
79-
*> pShelley
80-
)
81-
<|> ( Opt.flag' ()
82-
( Opt.long "byron-mode"
83-
<> Opt.help "For talking to a node running in Byron-only mode."
84-
)
85-
*> pByron
86-
)
87-
<|> ( Opt.flag' ()
88-
( Opt.long "cardano-mode"
89-
<> Opt.help "For talking to a node running in full Cardano mode (default)."
90-
)
91-
*> pCardano
92-
)
93-
<|> -- Default to the Cardano protocol.
94-
pure (AnyConsensusModeParams (CardanoModeParams (EpochSlots defaultByronEpochSlots)))
95-
where
96-
pByron :: Parser AnyConsensusModeParams
97-
pByron = AnyConsensusModeParams . ByronModeParams <$> pEpochSlots
98-
99-
pShelley :: Parser AnyConsensusModeParams
100-
pShelley = pure (AnyConsensusModeParams ShelleyModeParams)
101-
102-
pCardano :: Parser AnyConsensusModeParams
103-
pCardano = AnyConsensusModeParams . CardanoModeParams <$> pEpochSlots
104-
105-
pEpochSlots :: Parser EpochSlots
106-
pEpochSlots = EpochSlots <$> Opt.option Opt.auto
107-
( Opt.long "epoch-slots"
108-
<> Opt.metavar "NATURAL"
109-
<> Opt.help "The number of slots per epoch for the Byron era."
110-
<> Opt.value defaultByronEpochSlots -- Default to the mainnet value.
111-
<> Opt.showDefault
112-
)
113-
114-
defaultByronEpochSlots :: Word64
115-
defaultByronEpochSlots = 21600
116-
11745
pSocketPath :: Parser SocketPath
11846
pSocketPath = SocketPath <$> Opt.strOption
11947
( Opt.long "socket-path"

0 commit comments

Comments
 (0)