{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}

module Cardano.CLI.EraBased.Governance.DRep.Option
  ( pGovernanceDRepCmds
  , pUpdateCertificateCmd
  )
where

import Cardano.Api
import Cardano.Api.Experimental qualified as Exp
import Cardano.Api.Ledger qualified as L

import Cardano.CLI.EraBased.Common.Option
import Cardano.CLI.EraBased.Governance.DRep.Command
import Cardano.CLI.EraIndependent.Hash.Command (HashGoal (..))
import Cardano.CLI.Option.Flag
import Cardano.CLI.Parser
import Cardano.CLI.Read

import Control.Applicative (Alternative ((<|>)), optional)
import Data.Foldable (asum)
import Data.Function
import Options.Applicative (Parser)
import Options.Applicative qualified as Opt

pGovernanceDRepCmds
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepCmds :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepCmds =
  String
-> InfoMod (GovernanceDRepCmds era)
-> [Maybe (Parser (GovernanceDRepCmds era))]
-> Maybe (Parser (GovernanceDRepCmds era))
forall a.
String -> InfoMod a -> [Maybe (Parser a)] -> Maybe (Parser a)
subInfoParser
    String
"drep"
    ( String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc (String -> InfoMod (GovernanceDRepCmds era))
-> String -> InfoMod (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
        [String] -> String
forall a. Monoid a => [a] -> a
mconcat
          [ String
"DRep member commands."
          ]
    )
    [ Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyGenCmd
    , Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyIdCmd
    , Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRegistrationCertificateCmd
    , Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRetirementCertificateCmd
    , Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pUpdateCertificateCmd
    , Maybe (Parser (GovernanceDRepCmds era))
forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDrepMetadataHashCmd
    ]

pGovernanceDRepKeyGenCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyGenCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyGenCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$ Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser
    (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"key-gen"
    (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info
      ( (GovernanceDRepKeyGenCmdArgs era -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepKeyGenCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepKeyGenCmdArgs era -> GovernanceDRepCmds era
forall era.
GovernanceDRepKeyGenCmdArgs era -> GovernanceDRepCmds era
GovernanceDRepKeyGenCmd (Parser (GovernanceDRepKeyGenCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepKeyGenCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          Era era
-> File (VerificationKey ()) 'Out
-> File (SigningKey ()) 'Out
-> GovernanceDRepKeyGenCmdArgs era
forall era.
Era era
-> File (VerificationKey ()) 'Out
-> File (SigningKey ()) 'Out
-> GovernanceDRepKeyGenCmdArgs era
GovernanceDRepKeyGenCmdArgs Era era
forall era. IsEra era => Era era
Exp.useEra
            (File (VerificationKey ()) 'Out
 -> File (SigningKey ()) 'Out -> GovernanceDRepKeyGenCmdArgs era)
-> Parser (File (VerificationKey ()) 'Out)
-> Parser
     (File (SigningKey ()) 'Out -> GovernanceDRepKeyGenCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (File (VerificationKey ()) 'Out)
forall keyrole. Parser (File (VerificationKey keyrole) 'Out)
pVerificationKeyFileOut
            Parser
  (File (SigningKey ()) 'Out -> GovernanceDRepKeyGenCmdArgs era)
-> Parser (File (SigningKey ()) 'Out)
-> Parser (GovernanceDRepKeyGenCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File (SigningKey ()) 'Out)
forall keyrole. Parser (File (SigningKey keyrole) 'Out)
pSigningKeyFileOut
      )
    (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Generate Delegated Representative verification and signing keys."

pGovernanceDRepKeyIdCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyIdCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepKeyIdCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$ Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser
    (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"id"
    (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info
      ( (GovernanceDRepIdCmdArgs era -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepIdCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepIdCmdArgs era -> GovernanceDRepCmds era
forall era. GovernanceDRepIdCmdArgs era -> GovernanceDRepCmds era
GovernanceDRepIdCmd (Parser (GovernanceDRepIdCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepIdCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          Era era
-> VerificationKeyOrHashOrFile DRepKey
-> Vary '[FormatBech32, FormatHex, FormatCip129]
-> Maybe (File () 'Out)
-> GovernanceDRepIdCmdArgs era
forall era.
Era era
-> VerificationKeyOrHashOrFile DRepKey
-> Vary '[FormatBech32, FormatHex, FormatCip129]
-> Maybe (File () 'Out)
-> GovernanceDRepIdCmdArgs era
GovernanceDRepIdCmdArgs Era era
forall era. IsEra era => Era era
Exp.useEra
            (VerificationKeyOrHashOrFile DRepKey
 -> Vary '[FormatBech32, FormatHex, FormatCip129]
 -> Maybe (File () 'Out)
 -> GovernanceDRepIdCmdArgs era)
-> Parser (VerificationKeyOrHashOrFile DRepKey)
-> Parser
     (Vary '[FormatBech32, FormatHex, FormatCip129]
      -> Maybe (File () 'Out) -> GovernanceDRepIdCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (VerificationKeyOrHashOrFile DRepKey)
pDRepVerificationKeyOrHashOrFile
            Parser
  (Vary '[FormatBech32, FormatHex, FormatCip129]
   -> Maybe (File () 'Out) -> GovernanceDRepIdCmdArgs era)
-> Parser (Vary '[FormatBech32, FormatHex, FormatCip129])
-> Parser (Maybe (File () 'Out) -> GovernanceDRepIdCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String
-> [Flag (Vary '[FormatBech32, FormatHex, FormatCip129])]
-> Parser (Vary '[FormatBech32, FormatHex, FormatCip129])
forall (fs :: [*]). String -> [Flag (Vary fs)] -> Parser (Vary fs)
pFormatFlags
              String
"drep id output"
              [ Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
forall (fs :: [*]). (FormatHex :| fs) => Flag (Vary fs)
flagFormatHex
              , Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
forall (fs :: [*]). (FormatBech32 :| fs) => Flag (Vary fs)
flagFormatBech32 Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
-> (Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
    -> Flag (Vary '[FormatBech32, FormatHex, FormatCip129]))
-> Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
forall a b. a -> (a -> b) -> b
& Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
-> Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
forall a. Flag a -> Flag a
setDefault
              , Flag (Vary '[FormatBech32, FormatHex, FormatCip129])
forall (fs :: [*]). (FormatCip129 :| fs) => Flag (Vary fs)
flagFormatCip129
              ]
            Parser (Maybe (File () 'Out) -> GovernanceDRepIdCmdArgs era)
-> Parser (Maybe (File () 'Out))
-> Parser (GovernanceDRepIdCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out) -> Parser (Maybe (File () 'Out))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile
      )
    (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Generate a drep id."

-- Registration Certificate related

pRegistrationCertificateCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRegistrationCertificateCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRegistrationCertificateCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$
    Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
      String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"registration-certificate" (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
        Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (Era era -> Parser (GovernanceDRepCmds era)
forall {era}. Era era -> Parser (GovernanceDRepCmds era)
mkParser Era era
forall era. IsEra era => Era era
Exp.useEra) (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create a registration certificate."
 where
  mkParser :: Era era -> Parser (GovernanceDRepCmds era)
mkParser Era era
w =
    (GovernanceDRepRegistrationCertificateCmdArgs era
 -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepRegistrationCertificateCmdArgs era
-> GovernanceDRepCmds era
forall era.
GovernanceDRepRegistrationCertificateCmdArgs era
-> GovernanceDRepCmds era
GovernanceDRepRegistrationCertificateCmd (Parser (GovernanceDRepRegistrationCertificateCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
      Era era
-> DRepHashSource
-> Lovelace
-> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> File () 'Out
-> GovernanceDRepRegistrationCertificateCmdArgs era
forall era.
Era era
-> DRepHashSource
-> Lovelace
-> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> File () 'Out
-> GovernanceDRepRegistrationCertificateCmdArgs era
GovernanceDRepRegistrationCertificateCmdArgs Era era
w
        (DRepHashSource
 -> Lovelace
 -> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
 -> File () 'Out
 -> GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser DRepHashSource
-> Parser
     (Lovelace
      -> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
      -> File () 'Out
      -> GovernanceDRepRegistrationCertificateCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser DRepHashSource
pDRepHashSource
        Parser
  (Lovelace
   -> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
   -> File () 'Out
   -> GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser Lovelace
-> Parser
     (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
      -> File () 'Out
      -> GovernanceDRepRegistrationCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Lovelace
pKeyRegistDeposit
        Parser
  (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
   -> File () 'Out
   -> GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor))
-> Parser
     (File () 'Out -> GovernanceDRepRegistrationCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> Parser (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
          ( Parser (MustCheckHash DRepMetadataUrl)
-> Parser Anchor
-> Parser (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
forall anchorType anchor.
Parser (MustCheckHash anchorType)
-> Parser anchor
-> Parser (PotentiallyCheckedAnchor anchorType anchor)
pPotentiallyCheckedAnchorData
              Parser (MustCheckHash DRepMetadataUrl)
pMustCheckMetadataHash
              Parser Anchor
pDRepMetadata
          )
        Parser
  (File () 'Out -> GovernanceDRepRegistrationCertificateCmdArgs era)
-> Parser (File () 'Out)
-> Parser (GovernanceDRepRegistrationCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile

pDRepMetadata :: Parser L.Anchor
pDRepMetadata :: Parser Anchor
pDRepMetadata =
  Url -> SafeHash AnchorData -> Anchor
L.Anchor
    (Url -> SafeHash AnchorData -> Anchor)
-> Parser Url -> Parser (SafeHash AnchorData -> Anchor)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (AnchorUrl -> Url) -> Parser AnchorUrl -> Parser Url
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AnchorUrl -> Url
unAnchorUrl Parser AnchorUrl
pDrepMetadataUrl
    Parser (SafeHash AnchorData -> Anchor)
-> Parser (SafeHash AnchorData) -> Parser Anchor
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (SafeHash AnchorData)
pDrepMetadataHash

pDrepMetadataUrl :: Parser AnchorUrl
pDrepMetadataUrl :: Parser AnchorUrl
pDrepMetadataUrl =
  Url -> AnchorUrl
AnchorUrl
    (Url -> AnchorUrl) -> Parser Url -> Parser AnchorUrl
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser Url
pUrl String
"drep-metadata-url" String
"DRep anchor URL"

pExpectedDrepMetadataHash :: Parser (Hash DRepMetadata)
pExpectedDrepMetadataHash :: Parser (Hash DRepMetadata)
pExpectedDrepMetadataHash =
  (SafeHash AnchorData -> Hash DRepMetadata)
-> String -> Parser (Hash DRepMetadata)
forall a. (SafeHash AnchorData -> a) -> String -> Parser a
pExpectedHash (Hash HASH ByteString -> Hash DRepMetadata
DRepMetadataHash (Hash HASH ByteString -> Hash DRepMetadata)
-> (SafeHash AnchorData -> Hash HASH ByteString)
-> SafeHash AnchorData
-> Hash DRepMetadata
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SafeHash ByteString -> Hash HASH ByteString
forall i. SafeHash i -> Hash HASH i
L.extractHash (SafeHash ByteString -> Hash HASH ByteString)
-> (SafeHash AnchorData -> SafeHash ByteString)
-> SafeHash AnchorData
-> Hash HASH ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SafeHash AnchorData -> SafeHash ByteString
forall i j. SafeHash i -> SafeHash j
L.castSafeHash) String
"DRep metadata"

pDrepMetadataHash :: Parser (L.SafeHash L.AnchorData)
pDrepMetadataHash :: Parser (SafeHash AnchorData)
pDrepMetadataHash =
  ReadM (SafeHash AnchorData)
-> Mod OptionFields (SafeHash AnchorData)
-> Parser (SafeHash AnchorData)
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option ReadM (SafeHash AnchorData)
readSafeHash (Mod OptionFields (SafeHash AnchorData)
 -> Parser (SafeHash AnchorData))
-> Mod OptionFields (SafeHash AnchorData)
-> Parser (SafeHash AnchorData)
forall a b. (a -> b) -> a -> b
$
    [Mod OptionFields (SafeHash AnchorData)]
-> Mod OptionFields (SafeHash AnchorData)
forall a. Monoid a => [a] -> a
mconcat
      [ String -> Mod OptionFields (SafeHash AnchorData)
forall (f :: * -> *) a. HasName f => String -> Mod f a
Opt.long String
"drep-metadata-hash"
      , String -> Mod OptionFields (SafeHash AnchorData)
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
Opt.metavar String
"HASH"
      , String -> Mod OptionFields (SafeHash AnchorData)
forall (f :: * -> *) a. String -> Mod f a
Opt.help String
"DRep anchor data hash."
      ]

pRetirementCertificateCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRetirementCertificateCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pRetirementCertificateCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$ Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser
    (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"retirement-certificate"
    (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info
      ( (GovernanceDRepRetirementCertificateCmdArgs era
 -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepRetirementCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepRetirementCertificateCmdArgs era
-> GovernanceDRepCmds era
forall era.
GovernanceDRepRetirementCertificateCmdArgs era
-> GovernanceDRepCmds era
GovernanceDRepRetirementCertificateCmd (Parser (GovernanceDRepRetirementCertificateCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepRetirementCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          Era era
-> DRepHashSource
-> Lovelace
-> File () 'Out
-> GovernanceDRepRetirementCertificateCmdArgs era
forall era.
Era era
-> DRepHashSource
-> Lovelace
-> File () 'Out
-> GovernanceDRepRetirementCertificateCmdArgs era
GovernanceDRepRetirementCertificateCmdArgs Era era
forall era. IsEra era => Era era
Exp.useEra
            (DRepHashSource
 -> Lovelace
 -> File () 'Out
 -> GovernanceDRepRetirementCertificateCmdArgs era)
-> Parser DRepHashSource
-> Parser
     (Lovelace
      -> File () 'Out -> GovernanceDRepRetirementCertificateCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser DRepHashSource
pDRepHashSource
            Parser
  (Lovelace
   -> File () 'Out -> GovernanceDRepRetirementCertificateCmdArgs era)
-> Parser Lovelace
-> Parser
     (File () 'Out -> GovernanceDRepRetirementCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Lovelace
pDrepDeposit
            Parser
  (File () 'Out -> GovernanceDRepRetirementCertificateCmdArgs era)
-> Parser (File () 'Out)
-> Parser (GovernanceDRepRetirementCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile
      )
    (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create a DRep retirement certificate."

pUpdateCertificateCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pUpdateCertificateCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pUpdateCertificateCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$ Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser
    (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"update-certificate"
    (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info
      ( (GovernanceDRepUpdateCertificateCmdArgs era
 -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepUpdateCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepUpdateCertificateCmdArgs era
-> GovernanceDRepCmds era
forall era.
GovernanceDRepUpdateCertificateCmdArgs era
-> GovernanceDRepCmds era
GovernanceDRepUpdateCertificateCmd (Parser (GovernanceDRepUpdateCertificateCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepUpdateCertificateCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          Era era
-> DRepHashSource
-> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> File () 'Out
-> GovernanceDRepUpdateCertificateCmdArgs era
forall era.
Era era
-> DRepHashSource
-> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> File () 'Out
-> GovernanceDRepUpdateCertificateCmdArgs era
GovernanceDRepUpdateCertificateCmdArgs Era era
forall era. IsEra era => Era era
Exp.useEra
            (DRepHashSource
 -> Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
 -> File () 'Out
 -> GovernanceDRepUpdateCertificateCmdArgs era)
-> Parser DRepHashSource
-> Parser
     (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
      -> File () 'Out -> GovernanceDRepUpdateCertificateCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser DRepHashSource
pDRepHashSource
            Parser
  (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
   -> File () 'Out -> GovernanceDRepUpdateCertificateCmdArgs era)
-> Parser (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor))
-> Parser
     (File () 'Out -> GovernanceDRepUpdateCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
-> Parser (Maybe (PotentiallyCheckedAnchor DRepMetadataUrl Anchor))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
              ( Parser (MustCheckHash DRepMetadataUrl)
-> Parser Anchor
-> Parser (PotentiallyCheckedAnchor DRepMetadataUrl Anchor)
forall anchorType anchor.
Parser (MustCheckHash anchorType)
-> Parser anchor
-> Parser (PotentiallyCheckedAnchor anchorType anchor)
pPotentiallyCheckedAnchorData
                  Parser (MustCheckHash DRepMetadataUrl)
pMustCheckMetadataHash
                  Parser Anchor
pDRepMetadata
              )
            Parser (File () 'Out -> GovernanceDRepUpdateCertificateCmdArgs era)
-> Parser (File () 'Out)
-> Parser (GovernanceDRepUpdateCertificateCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile
      )
    (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create a DRep update certificate."

pGovernanceDrepMetadataHashCmd
  :: Exp.IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDrepMetadataHashCmd :: forall era. IsEra era => Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDrepMetadataHashCmd = do
  Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Parser (GovernanceDRepCmds era)
 -> Maybe (Parser (GovernanceDRepCmds era)))
-> Parser (GovernanceDRepCmds era)
-> Maybe (Parser (GovernanceDRepCmds era))
forall a b. (a -> b) -> a -> b
$ Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a. Mod CommandFields a -> Parser a
Opt.hsubparser
    (Mod CommandFields (GovernanceDRepCmds era)
 -> Parser (GovernanceDRepCmds era))
-> Mod CommandFields (GovernanceDRepCmds era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a. String -> ParserInfo a -> Mod CommandFields a
commandWithMetavar String
"metadata-hash"
    (ParserInfo (GovernanceDRepCmds era)
 -> Mod CommandFields (GovernanceDRepCmds era))
-> ParserInfo (GovernanceDRepCmds era)
-> Mod CommandFields (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ Parser (GovernanceDRepCmds era)
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info
      ( (GovernanceDRepMetadataHashCmdArgs era -> GovernanceDRepCmds era)
-> Parser (GovernanceDRepMetadataHashCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepMetadataHashCmdArgs era -> GovernanceDRepCmds era
forall era.
GovernanceDRepMetadataHashCmdArgs era -> GovernanceDRepCmds era
GovernanceDRepMetadataHashCmd (Parser (GovernanceDRepMetadataHashCmdArgs era)
 -> Parser (GovernanceDRepCmds era))
-> Parser (GovernanceDRepMetadataHashCmdArgs era)
-> Parser (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$
          Era era
-> DRepMetadataSource
-> HashGoal (Hash DRepMetadata)
-> GovernanceDRepMetadataHashCmdArgs era
forall era.
Era era
-> DRepMetadataSource
-> HashGoal (Hash DRepMetadata)
-> GovernanceDRepMetadataHashCmdArgs era
GovernanceDRepMetadataHashCmdArgs Era era
forall era. IsEra era => Era era
Exp.useEra
            (DRepMetadataSource
 -> HashGoal (Hash DRepMetadata)
 -> GovernanceDRepMetadataHashCmdArgs era)
-> Parser DRepMetadataSource
-> Parser
     (HashGoal (Hash DRepMetadata)
      -> GovernanceDRepMetadataHashCmdArgs era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser DRepMetadataSource
pDRepMetadataSource
            Parser
  (HashGoal (Hash DRepMetadata)
   -> GovernanceDRepMetadataHashCmdArgs era)
-> Parser (HashGoal (Hash DRepMetadata))
-> Parser (GovernanceDRepMetadataHashCmdArgs era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (HashGoal (Hash DRepMetadata))
pDRepHashGoal
      )
    (InfoMod (GovernanceDRepCmds era)
 -> ParserInfo (GovernanceDRepCmds era))
-> InfoMod (GovernanceDRepCmds era)
-> ParserInfo (GovernanceDRepCmds era)
forall a b. (a -> b) -> a -> b
$ String -> InfoMod (GovernanceDRepCmds era)
forall a. String -> InfoMod a
Opt.progDesc
      String
"Calculate the hash of a metadata file, optionally checking the obtained hash against an expected value."

pDRepHashGoal :: Parser (HashGoal (Hash DRepMetadata))
pDRepHashGoal :: Parser (HashGoal (Hash DRepMetadata))
pDRepHashGoal =
  [Parser (HashGoal (Hash DRepMetadata))]
-> Parser (HashGoal (Hash DRepMetadata))
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ Hash DRepMetadata -> HashGoal (Hash DRepMetadata)
forall hash. hash -> HashGoal hash
CheckHash (Hash DRepMetadata -> HashGoal (Hash DRepMetadata))
-> Parser (Hash DRepMetadata)
-> Parser (HashGoal (Hash DRepMetadata))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Hash DRepMetadata)
pExpectedDrepMetadataHash
    , File () 'Out -> HashGoal (Hash DRepMetadata)
forall hash. File () 'Out -> HashGoal hash
HashToFile (File () 'Out -> HashGoal (Hash DRepMetadata))
-> Parser (File () 'Out) -> Parser (HashGoal (Hash DRepMetadata))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile
    ]
    Parser (HashGoal (Hash DRepMetadata))
-> Parser (HashGoal (Hash DRepMetadata))
-> Parser (HashGoal (Hash DRepMetadata))
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HashGoal (Hash DRepMetadata)
-> Parser (HashGoal (Hash DRepMetadata))
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure HashGoal (Hash DRepMetadata)
forall hash. HashGoal hash
HashToStdout

pDRepMetadataSource :: Parser DRepMetadataSource
pDRepMetadataSource :: Parser DRepMetadataSource
pDRepMetadataSource =
  [Parser DRepMetadataSource] -> Parser DRepMetadataSource
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ DRepMetadataFile 'In -> DRepMetadataSource
DrepMetadataFileIn (DRepMetadataFile 'In -> DRepMetadataSource)
-> Parser (DRepMetadataFile 'In) -> Parser DRepMetadataSource
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser (DRepMetadataFile 'In)
forall a. String -> String -> Parser (File a 'In)
pFileInDirection String
"drep-metadata-file" String
"JSON Metadata file to hash."
    , Url -> DRepMetadataSource
DrepMetadataURL (Url -> DRepMetadataSource)
-> Parser Url -> Parser DRepMetadataSource
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> String -> Parser Url
pUrl String
"drep-metadata-url" String
"URL pointing to the JSON Metadata file to hash."
    ]