{-# LANGUAGE DeriveFunctor #-}
{-# OPTIONS_GHC -Wno-orphans #-}

-- | This module implements 'PrettyCooked', 'PrettyCookedList' and
-- 'PrettyCookedMaybe' instances for 'TxSkel's and its components.
module Cooked.Pretty.Skeleton (Contextualized (..)) where

import Cooked.Pretty.Class
import Cooked.Pretty.Options
import Cooked.Pretty.Plutus ()
import Cooked.Skeleton
import Data.Default
import Data.Map (Map)
import Data.Map qualified as Map
import Data.Maybe (catMaybes)
import Data.Set qualified as Set
import Ledger.Slot qualified as Ledger
import Optics.Core
import Plutus.Script.Utils.Address qualified as Script
import Plutus.Script.Utils.Value qualified as Script
import PlutusLedgerApi.V3 qualified as Api
import Prettyprinter ((<+>))
import Prettyprinter qualified as PP

instance PrettyCooked TxSkelSignatory where
  prettyCookedOpt :: PrettyCookedOpts -> TxSkelSignatory -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxSkelSignatory (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash -> PubKeyHash
pkh) Maybe XPrv
Nothing) = PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts PubKeyHash
pkh DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"(no private key attached)"
  prettyCookedOpt PrettyCookedOpts
opts (TxSkelSignatory (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash -> PubKeyHash
pkh) Just {}) = PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts PubKeyHash
pkh

-- | Some elements of a skeleton can only be printed when they are associated
-- with a context. This is typically the case for elements that need some
-- 'Api.TxOutRef's and datums to be resolved.
data Contextualized a = Contextualized
  { forall a. Contextualized a -> Map TxOutRef (TxSkelOut, Bool)
_ctxOutputs :: Map Api.TxOutRef (TxSkelOut, Bool),
    forall a. Contextualized a -> a
ctxContent :: a
  }
  deriving ((forall a b. (a -> b) -> Contextualized a -> Contextualized b)
-> (forall a b. a -> Contextualized b -> Contextualized a)
-> Functor Contextualized
forall a b. a -> Contextualized b -> Contextualized a
forall a b. (a -> b) -> Contextualized a -> Contextualized b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Contextualized a -> Contextualized b
fmap :: forall a b. (a -> b) -> Contextualized a -> Contextualized b
$c<$ :: forall a b. a -> Contextualized b -> Contextualized a
<$ :: forall a b. a -> Contextualized b -> Contextualized a
Functor)

-- | Prints a 'Contextualized' 'TxSkel'
instance PrettyCookedList (Contextualized TxSkel) where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> Contextualized TxSkel -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opts Contextualized TxSkel
cTxSkel
    | TxSkel Set TxSkelLabel
lbl TxSkelOpts
txopts TxSkelMints
mints [TxSkelSignatory]
signatories SlotRange
validityRange Map TxOutRef TxSkelRedeemer
ins Set TxOutRef
insReference [TxSkelOut]
outs [TxSkelProposal]
proposals TxSkelWithdrawals
withdrawals [TxSkelCertificate]
certificates <- Contextualized TxSkel -> TxSkel
forall a. Contextualized a -> a
ctxContent Contextualized TxSkel
cTxSkel =
        [ PrettyCookedOpts
-> DocCooked -> DocCooked -> Set TxSkelLabel -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Labels:" DocCooked
"-" Set TxSkelLabel
lbl,
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [Mint] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Mints:" DocCooked
"-" (Optic' An_Iso NoIx TxSkelMints [Mint] -> TxSkelMints -> [Mint]
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' An_Iso NoIx TxSkelMints [Mint]
txSkelMintsListI TxSkelMints
mints),
          DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ DocCooked
"Validity interval:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> SlotRange -> DocCooked
forall a ann. Pretty a => a -> Doc ann
forall ann. SlotRange -> Doc ann
PP.pretty SlotRange
validityRange,
          PrettyCookedOpts
-> DocCooked
-> DocCooked
-> (TxSkelOpts, [TxSkelSignatory])
-> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Signatories:" DocCooked
"-" (TxSkelOpts
txopts, [TxSkelSignatory]
signatories),
          PrettyCookedOpts
-> DocCooked
-> DocCooked
-> [Contextualized Input]
-> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Inputs:" DocCooked
"-" ((Input -> Contextualized TxSkel -> Contextualized Input
forall a b. a -> Contextualized b -> Contextualized a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Contextualized TxSkel
cTxSkel) (Input -> Contextualized Input)
-> ((TxOutRef, TxSkelRedeemer) -> Input)
-> (TxOutRef, TxSkelRedeemer)
-> Contextualized Input
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxOutRef -> TxSkelRedeemer -> Input)
-> (TxOutRef, TxSkelRedeemer) -> Input
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry TxOutRef -> TxSkelRedeemer -> Input
Input ((TxOutRef, TxSkelRedeemer) -> Contextualized Input)
-> [(TxOutRef, TxSkelRedeemer)] -> [Contextualized Input]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map TxOutRef TxSkelRedeemer -> [(TxOutRef, TxSkelRedeemer)]
forall k a. Map k a -> [(k, a)]
Map.toList Map TxOutRef TxSkelRedeemer
ins),
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Reference inputs:" DocCooked
"-" ([DocCooked] -> Maybe DocCooked) -> [DocCooked] -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ PrettyCookedOpts -> Contextualized ReferenceInput -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Contextualized ReferenceInput -> DocCooked)
-> (TxOutRef -> Contextualized ReferenceInput)
-> TxOutRef
-> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ReferenceInput
-> Contextualized TxSkel -> Contextualized ReferenceInput
forall a b. a -> Contextualized b -> Contextualized a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Contextualized TxSkel
cTxSkel) (ReferenceInput -> Contextualized ReferenceInput)
-> (TxOutRef -> ReferenceInput)
-> TxOutRef
-> Contextualized ReferenceInput
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxOutRef -> ReferenceInput
ReferenceInput (TxOutRef -> DocCooked) -> [TxOutRef] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Set TxOutRef -> [TxOutRef]
forall a. Set a -> [a]
Set.toList Set TxOutRef
insReference,
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Outputs:" DocCooked
"-" (PrettyCookedOpts -> TxSkelOut -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxSkelOut -> DocCooked) -> [TxSkelOut] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [TxSkelOut]
outs),
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Proposals:" DocCooked
"-" (PrettyCookedOpts -> DocCooked -> TxSkelProposal -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> a -> DocCooked
prettyItemizeNoTitle PrettyCookedOpts
opts DocCooked
"-" (TxSkelProposal -> DocCooked) -> [TxSkelProposal] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [TxSkelProposal]
proposals),
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [Withdrawal] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Withdrawals:" DocCooked
"-" ([Withdrawal] -> Maybe DocCooked)
-> [Withdrawal] -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ Optic' An_Iso NoIx TxSkelWithdrawals [Withdrawal]
-> TxSkelWithdrawals -> [Withdrawal]
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' An_Iso NoIx TxSkelWithdrawals [Withdrawal]
txSkelWithdrawalsListI TxSkelWithdrawals
withdrawals,
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [TxSkelCertificate] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Certificates:" DocCooked
"-" [TxSkelCertificate]
certificates,
          PrettyCookedOpts
-> DocCooked -> DocCooked -> TxSkelOpts -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Options:" DocCooked
"-" TxSkelOpts
txopts
        ]

instance PrettyCooked TxSkelCertificate where
  prettyCookedOpt :: PrettyCookedOpts -> TxSkelCertificate -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxSkelCertificate User kind 'Redemption
owner CertificateAction kind
action) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      (PrettyCookedOpts -> CertificateAction kind -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts CertificateAction kind
action)
      DocCooked
"-"
      ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$ User kind 'Redemption -> [DocCooked]
forall a. PrettyCookedList a => a -> [DocCooked]
prettyCookedList User kind 'Redemption
owner

instance PrettyCookedList (User req mode) where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> User req mode -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opt (UserPubKey (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash -> PubKeyHash
pkh)) = [DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked
"User" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt PubKeyHash
pkh)]
  prettyCookedOptListMaybe PrettyCookedOpts
opt (UserScript (script -> VScript
forall script. ToVScript script => script -> VScript
toVScript -> VScript
vScript)) = [DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked
"Script" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> VScript -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt VScript
vScript)]
  prettyCookedOptListMaybe PrettyCookedOpts
opt (UserRedeemedScript (script -> VScript
forall script. ToVScript script => script -> VScript
toVScript -> VScript
script) TxSkelRedeemer
red) =
    DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (PrettyCookedOpts -> VScript -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt VScript
script) Maybe DocCooked -> [Maybe DocCooked] -> [Maybe DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> TxSkelRedeemer -> [Maybe DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opt TxSkelRedeemer
red

instance PrettyCooked (CertificateAction req) where
  prettyCookedOpt :: PrettyCookedOpts -> CertificateAction req -> DocCooked
prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
StakingRegister = DocCooked
"Register staking"
  prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
StakingUnRegister = DocCooked
"Unregister staking"
  prettyCookedOpt PrettyCookedOpts
opt (StakingDelegate Delegatee
deleg) = DocCooked
"Delegate staking to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Delegatee -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt Delegatee
deleg
  prettyCookedOpt PrettyCookedOpts
opt (StakingRegisterDelegate Delegatee
deleg) = DocCooked
"Register staking and delegate it to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Delegatee -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt Delegatee
deleg
  prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
DRepRegister = DocCooked
"Register DRep"
  prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
DRepUpdate = DocCooked
"Update DRep"
  prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
DRepUnRegister = DocCooked
"Unregister DRep"
  prettyCookedOpt PrettyCookedOpts
opt (PoolRegister PubKeyHash
poolVfr) = DocCooked
"Register pool" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt PubKeyHash
poolVfr
  prettyCookedOpt PrettyCookedOpts
_ (PoolRetire (Ledger.Slot Integer
n)) = DocCooked
"Retire pool at slot" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> DocCooked
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
PP.pretty Integer
n
  prettyCookedOpt PrettyCookedOpts
opt (CommitteeRegisterHot Credential
cred) = DocCooked
"Register hot credential" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt Credential
cred
  prettyCookedOpt PrettyCookedOpts
_ CertificateAction req
CommitteeResign = DocCooked
"Resign committee"

instance PrettyCooked Api.Delegatee where
  prettyCookedOpt :: PrettyCookedOpts -> Delegatee -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt (Api.DelegStake PubKeyHash
pkh) = DocCooked
"Delegate stake to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt PubKeyHash
pkh
  prettyCookedOpt PrettyCookedOpts
opt (Api.DelegVote DRep
dRep) = DocCooked
"Delegate vote to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> DRep -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt DRep
dRep
  prettyCookedOpt PrettyCookedOpts
opt (Api.DelegStakeVote PubKeyHash
pkh DRep
dRep) = DocCooked
"Delegate stake to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opt PubKeyHash
pkh DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"and delegate vote to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> DRep -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt DRep
dRep

instance PrettyCooked Api.DRep where
  prettyCookedOpt :: PrettyCookedOpts -> DRep -> DocCooked
prettyCookedOpt PrettyCookedOpts
_ DRep
Api.DRepAlwaysAbstain = DocCooked
"Always abstain"
  prettyCookedOpt PrettyCookedOpts
_ DRep
Api.DRepAlwaysNoConfidence = DocCooked
"Always no confidence"
  prettyCookedOpt PrettyCookedOpts
opt (Api.DRep (Api.DRepCredential Credential
cred)) = PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opt Credential
cred

instance PrettyCooked Withdrawal where
  prettyCookedOpt :: PrettyCookedOpts -> Withdrawal -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Withdrawal User 'IsEither 'Redemption
user Maybe Lovelace
mAmount) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Withdrawal" DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
      PrettyCookedOpts -> User 'IsEither 'Redemption -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts User 'IsEither 'Redemption
user
        [DocCooked] -> [DocCooked] -> [DocCooked]
forall a. [a] -> [a] -> [a]
++ [DocCooked -> (Lovelace -> DocCooked) -> Maybe Lovelace -> DocCooked
forall b a. b -> (a -> b) -> Maybe a -> b
maybe DocCooked
"Amount to be autofilled" ((DocCooked
"Amount: " DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<>) (DocCooked -> DocCooked)
-> (Lovelace -> DocCooked) -> Lovelace -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> DocCooked
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
PP.pretty (Integer -> DocCooked)
-> (Lovelace -> Integer) -> Lovelace -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Lovelace -> Integer
Api.getLovelace) Maybe Lovelace
mAmount]

instance PrettyCooked ParameterChange where
  prettyCookedOpt :: PrettyCookedOpts -> ParameterChange -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (FeePerByte Integer
n) = DocCooked
"Fee per byte:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (FeeFixed Integer
n) = DocCooked
"Fee fixed:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (MaxBlockBodySize Integer
n) = DocCooked
"Max block body size:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (MaxTxSize Integer
n) = DocCooked
"Max transaction size:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (MaxBlockHeaderSize Integer
n) = DocCooked
"Max block header size:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (KeyDeposit Integer
n) = DocCooked
"Key deposit:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (PoolDeposit Integer
n) = DocCooked
"Pool deposit:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (PoolRetirementMaxEpoch Integer
n) = DocCooked
"Pool retirement max epoch:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (PoolNumber Integer
n) = DocCooked
"Pool number:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (PoolInfluence Rational
q) = DocCooked
"Pool influence:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
q
  prettyCookedOpt PrettyCookedOpts
opts (MonetaryExpansion Rational
q) = DocCooked
"Monetary expansion:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
q
  prettyCookedOpt PrettyCookedOpts
opts (TreasuryCut Rational
q) = DocCooked
"Treasury cut:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
q
  prettyCookedOpt PrettyCookedOpts
opts (MinPoolCost Integer
n) = DocCooked
"Min pool cost:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (CoinsPerUTxOByte Integer
n) = DocCooked
"Lovelace per utxo byte:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
_opts (CostModels [Integer]
_pv1 [Integer]
_pv2 [Integer]
_pv3) = DocCooked
"Cost models (unsupported)"
  prettyCookedOpt PrettyCookedOpts
opts (Prices Rational
q Rational
r) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"Prices:"
      DocCooked
"-"
      [ DocCooked
"Memory cost:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
q,
        DocCooked
"Step cost:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
r
      ]
  prettyCookedOpt PrettyCookedOpts
opts (MaxTxExUnits Integer
n Integer
m) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"Max transaction execution units:"
      DocCooked
"-"
      [ DocCooked
"Max memory:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n,
        DocCooked
"Max steps:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
m
      ]
  prettyCookedOpt PrettyCookedOpts
opts (MaxBlockExUnits Integer
n Integer
m) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"Max block execution units:"
      DocCooked
"-"
      [ DocCooked
"Max memory:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n,
        DocCooked
"Max steps:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
m
      ]
  prettyCookedOpt PrettyCookedOpts
opts (MaxValSize Integer
n) = DocCooked
"Max value size:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (CollateralPercentage Integer
n) = DocCooked
"Collateral percentage:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (MaxCollateralInputs Integer
n) = DocCooked
"Max number of collateral inputs:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (PoolVotingThresholds Rational
a Rational
b Rational
c Rational
d Rational
e) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"Pool voting thresholds:"
      DocCooked
"-"
      [ DocCooked
"Motion no confidence:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
a,
        DocCooked
"Committee normal:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
b,
        DocCooked
"Committee no confidence:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
c,
        DocCooked
"Hard fork:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
d,
        DocCooked
"Security group:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
e
      ]
  prettyCookedOpt PrettyCookedOpts
opts (DRepVotingThresholds Rational
a Rational
b Rational
c Rational
d Rational
e Rational
f Rational
g Rational
h Rational
i Rational
j) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"DRep voting thresholds:"
      DocCooked
"-"
      [ DocCooked
"Motion no confidence:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
a,
        DocCooked
"Committee normal:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
b,
        DocCooked
"Committee no confidence:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
c,
        DocCooked
"Update constitution:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
d,
        DocCooked
"Hard fork initialization:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
e,
        DocCooked
"Network group:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
f,
        DocCooked
"Economic group:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
g,
        DocCooked
"Technical group:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
h,
        DocCooked
"Governance group:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
i,
        DocCooked
"Treasury withdrawal:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
j
      ]
  prettyCookedOpt PrettyCookedOpts
opts (CommitteeMinSize Integer
n) = DocCooked
"Committee min size:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (CommitteeMaxTermLength Integer
n) = DocCooked
"Committee max term length:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (GovActionLifetime Integer
n) = DocCooked
"Governance action life time:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (GovActionDeposit Integer
n) = DocCooked
"Governance action deposit:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (DRepRegistrationDeposit Integer
n) = DocCooked
"DRep registration deposit:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (DRepActivity Integer
n) = DocCooked
"DRep activity:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
n
  prettyCookedOpt PrettyCookedOpts
opts (MinFeeRefScriptCostPerByte Rational
q) = DocCooked
"Min fee per byto of reference script:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Rational
q

instance PrettyCookedList TxSkelRedeemer where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> TxSkelRedeemer -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opts (TxSkelRedeemer redeemer
red Maybe TxOutRef
mRefScript Bool
_) =
    [ DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ DocCooked
"Redeemer" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> redeemer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts redeemer
red,
      (DocCooked
"Reference script at:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (TxOutRef -> DocCooked) -> TxOutRef -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrettyCookedOpts -> TxOutRef -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxOutRef -> DocCooked) -> Maybe TxOutRef -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe TxOutRef
mRefScript
    ]

instance PrettyCookedList TxSkelProposal where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> TxSkelProposal -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opts TxSkelProposal
txSkelProposal =
    [ DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ DocCooked
"Return credential:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Optic' A_Lens NoIx TxSkelProposal Credential
-> TxSkelProposal -> Credential
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx TxSkelProposal Credential
txSkelProposalReturnCredentialL TxSkelProposal
txSkelProposal),
      (DocCooked
"Witnessed governance action:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (GovernanceAction 'IsScript -> DocCooked)
-> GovernanceAction 'IsScript
-> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrettyCookedOpts -> GovernanceAction 'IsScript -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (GovernanceAction 'IsScript -> DocCooked)
-> Maybe (GovernanceAction 'IsScript) -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic'
  An_AffineTraversal NoIx TxSkelProposal (GovernanceAction 'IsScript)
-> TxSkelProposal -> Maybe (GovernanceAction 'IsScript)
forall k (is :: IxList) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview (forall (req :: UserKind).
Typeable req =>
AffineTraversal' TxSkelProposal (GovernanceAction req)
txSkelProposalGovernanceActionAT @IsScript) TxSkelProposal
txSkelProposal,
      (DocCooked
"Other governance action:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (GovernanceAction 'IsNone -> DocCooked)
-> GovernanceAction 'IsNone
-> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrettyCookedOpts -> GovernanceAction 'IsNone -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (GovernanceAction 'IsNone -> DocCooked)
-> Maybe (GovernanceAction 'IsNone) -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic'
  An_AffineTraversal NoIx TxSkelProposal (GovernanceAction 'IsNone)
-> TxSkelProposal -> Maybe (GovernanceAction 'IsNone)
forall k (is :: IxList) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview (forall (req :: UserKind).
Typeable req =>
AffineTraversal' TxSkelProposal (GovernanceAction req)
txSkelProposalGovernanceActionAT @IsNone) TxSkelProposal
txSkelProposal,
      (DocCooked
"Constitution witness:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (VScript -> DocCooked) -> VScript -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrettyCookedOpts -> VScript -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (VScript -> DocCooked) -> Maybe VScript -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic' An_AffineTraversal NoIx TxSkelProposal VScript
-> TxSkelProposal -> Maybe VScript
forall k (is :: IxList) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview (AffineTraversal'
  TxSkelProposal (Maybe (User 'IsScript 'Redemption))
forall (kind :: UserKind).
Typeable kind =>
AffineTraversal' TxSkelProposal (Maybe (User kind 'Redemption))
txSkelProposalMConstitutionAT AffineTraversal'
  TxSkelProposal (Maybe (User 'IsScript 'Redemption))
-> Optic
     A_Prism
     NoIx
     (Maybe (User 'IsScript 'Redemption))
     (Maybe (User 'IsScript 'Redemption))
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
-> Optic
     An_AffineTraversal
     NoIx
     TxSkelProposal
     TxSkelProposal
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  A_Prism
  NoIx
  (Maybe (User 'IsScript 'Redemption))
  (Maybe (User 'IsScript 'Redemption))
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just Optic
  An_AffineTraversal
  NoIx
  TxSkelProposal
  TxSkelProposal
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
-> Optic
     A_Lens
     NoIx
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
     VScript
     VScript
-> Optic' An_AffineTraversal NoIx TxSkelProposal VScript
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  A_Lens
  NoIx
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
  VScript
  VScript
forall (mode :: UserMode). Lens' (User 'IsScript mode) VScript
userVScriptL) TxSkelProposal
txSkelProposal
    ]
      [Maybe DocCooked] -> [Maybe DocCooked] -> [Maybe DocCooked]
forall a. [a] -> [a] -> [a]
++ [Maybe DocCooked]
-> (TxSkelRedeemer -> [Maybe DocCooked])
-> Maybe TxSkelRedeemer
-> [Maybe DocCooked]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (PrettyCookedOpts -> TxSkelRedeemer -> [Maybe DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [Maybe DocCooked]
prettyCookedOptListMaybe PrettyCookedOpts
opts) (Optic' An_AffineTraversal NoIx TxSkelProposal TxSkelRedeemer
-> TxSkelProposal -> Maybe TxSkelRedeemer
forall k (is :: IxList) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview (AffineTraversal'
  TxSkelProposal (Maybe (User 'IsScript 'Redemption))
forall (kind :: UserKind).
Typeable kind =>
AffineTraversal' TxSkelProposal (Maybe (User kind 'Redemption))
txSkelProposalMConstitutionAT AffineTraversal'
  TxSkelProposal (Maybe (User 'IsScript 'Redemption))
-> Optic
     A_Prism
     NoIx
     (Maybe (User 'IsScript 'Redemption))
     (Maybe (User 'IsScript 'Redemption))
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
-> Optic
     An_AffineTraversal
     NoIx
     TxSkelProposal
     TxSkelProposal
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  A_Prism
  NoIx
  (Maybe (User 'IsScript 'Redemption))
  (Maybe (User 'IsScript 'Redemption))
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
forall a b. Prism (Maybe a) (Maybe b) a b
_Just Optic
  An_AffineTraversal
  NoIx
  TxSkelProposal
  TxSkelProposal
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
-> Optic
     A_Lens
     NoIx
     (User 'IsScript 'Redemption)
     (User 'IsScript 'Redemption)
     TxSkelRedeemer
     TxSkelRedeemer
-> Optic' An_AffineTraversal NoIx TxSkelProposal TxSkelRedeemer
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic
  A_Lens
  NoIx
  (User 'IsScript 'Redemption)
  (User 'IsScript 'Redemption)
  TxSkelRedeemer
  TxSkelRedeemer
userTxSkelRedeemerL) TxSkelProposal
txSkelProposal)

instance PrettyCooked (GovernanceAction a) where
  prettyCookedOpt :: PrettyCookedOpts -> GovernanceAction a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (ParameterChange [ParameterChange]
params) = PrettyCookedOpts
-> DocCooked -> DocCooked -> [ParameterChange] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Parameter changes:" DocCooked
"-" [ParameterChange]
params
  prettyCookedOpt PrettyCookedOpts
opts (HardForkInitiation (Api.ProtocolVersion Integer
major Integer
minor)) =
    DocCooked
"Protocol version:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"(" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
major DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"," DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
minor DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
")"
  prettyCookedOpt PrettyCookedOpts
opts (TreasuryWithdrawals Map Credential Lovelace
withdrawals) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Withdrawals:" DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
      (\(Credential
cred, Lovelace
lv) -> PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Credential
cred DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"|" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Value -> DocCooked
forall a. PrettyCooked a => a -> DocCooked
prettyCooked (Lovelace -> Value
forall a. ToValue a => a -> Value
Script.toValue Lovelace
lv)) ((Credential, Lovelace) -> DocCooked)
-> [(Credential, Lovelace)] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map Credential Lovelace -> [(Credential, Lovelace)]
forall k a. Map k a -> [(k, a)]
Map.toList Map Credential Lovelace
withdrawals
  prettyCookedOpt PrettyCookedOpts
_ GovernanceAction a
NoConfidence = DocCooked
"No confidence"
  prettyCookedOpt PrettyCookedOpts
opts (UpdateCommittee [ColdCommitteeCredential]
toRemoveCreds Map ColdCommitteeCredential Integer
toAddCreds Rational
quorum) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
      PrettyCookedOpts
opts
      DocCooked
"Updates in committee:"
      DocCooked
"-"
      [ PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Credentials to remove:" DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
          (\(Api.ColdCommitteeCredential Credential
cred) -> PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Credential
cred) (ColdCommitteeCredential -> DocCooked)
-> [ColdCommitteeCredential] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ColdCommitteeCredential]
toRemoveCreds,
        PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Credentials to add:" DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
          (\(Api.ColdCommitteeCredential Credential
cred, Integer
i) -> PrettyCookedOpts -> Credential -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Credential
cred DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"->" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
i) ((ColdCommitteeCredential, Integer) -> DocCooked)
-> [(ColdCommitteeCredential, Integer)] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map ColdCommitteeCredential Integer
-> [(ColdCommitteeCredential, Integer)]
forall k a. Map k a -> [(k, a)]
Map.toList Map ColdCommitteeCredential Integer
toAddCreds,
        DocCooked
"Quorum:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Rational -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Rational -> Rational
Api.toGHC Rational
quorum)
      ]
  prettyCookedOpt PrettyCookedOpts
opts (NewConstitution (Api.Constitution Maybe ScriptHash
mScriptHash)) = case Maybe ScriptHash
mScriptHash of
    Maybe ScriptHash
Nothing -> DocCooked
"Empty new constitution"
    Just ScriptHash
sHash -> DocCooked
"New constitution:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> ScriptHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts ScriptHash
sHash

-- | Prints a list of pubkeys with a flag next to the balancing user
instance PrettyCookedList (TxSkelOpts, [TxSkelSignatory]) where
  prettyCookedOptList :: PrettyCookedOpts -> (TxSkelOpts, [TxSkelSignatory]) -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (TxSkelOpts {txSkelOptBalancingPolicy :: TxSkelOpts -> BalancingPolicy
txSkelOptBalancingPolicy = BalancingPolicy
DoNotBalance}, [TxSkelSignatory]
signatories) = PrettyCookedOpts -> [TxSkelSignatory] -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts [TxSkelSignatory]
signatories
  prettyCookedOptList PrettyCookedOpts
opts (TxSkelOpts {txSkelOptBalancingPolicy :: TxSkelOpts -> BalancingPolicy
txSkelOptBalancingPolicy = BalancingPolicy
BalanceWithFirstSignatory}, TxSkelSignatory
firstSignatory : [TxSkelSignatory]
signatories) =
    PrettyCookedOpts -> TxSkelSignatory -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxSkelSignatory
firstSignatory DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"[balancing]" DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> [TxSkelSignatory] -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts [TxSkelSignatory]
signatories
  prettyCookedOptList PrettyCookedOpts
opts (TxSkelOpts {txSkelOptBalancingPolicy :: TxSkelOpts -> BalancingPolicy
txSkelOptBalancingPolicy = BalanceWith pkh
balancingUser}, [TxSkelSignatory]
signatories) =
    (\TxSkelSignatory
s -> if TxSkelSignatory -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash TxSkelSignatory
s PubKeyHash -> PubKeyHash -> Bool
forall a. Eq a => a -> a -> Bool
== pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash pkh
balancingUser then PrettyCookedOpts -> TxSkelSignatory -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxSkelSignatory
s DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"[balancing]" else PrettyCookedOpts -> TxSkelSignatory -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxSkelSignatory
s)
      (TxSkelSignatory -> DocCooked) -> [TxSkelSignatory] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [TxSkelSignatory]
signatories
  -- The following case should never happen for real transactions
  prettyCookedOptList PrettyCookedOpts
_ (TxSkelOpts
_, []) = []

-- | Prints a minting specification
--
-- Example:
-- > #abcdef
--     - Redeemer: red
--     - Reference script at: txOutRef
--     - "Foo": 500
--     - "Bar": 1000
instance PrettyCooked Mint where
  prettyCookedOpt :: PrettyCookedOpts -> Mint -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Mint (UserRedeemedScript script
pol TxSkelRedeemer
red) [(TokenName, Integer)]
tks) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (PrettyCookedOpts -> VScript -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (script -> VScript
forall script. ToVScript script => script -> VScript
toVScript script
pol)) DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
      PrettyCookedOpts -> TxSkelRedeemer -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts TxSkelRedeemer
red [DocCooked] -> [DocCooked] -> [DocCooked]
forall a. [a] -> [a] -> [a]
++ ((\(TokenName
tk, Integer
n) -> TokenName -> DocCooked
forall a ann. Show a => a -> Doc ann
PP.viaShow TokenName
tk DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> DocCooked
":" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> DocCooked
forall a ann. Show a => a -> Doc ann
PP.viaShow Integer
n) ((TokenName, Integer) -> DocCooked)
-> [(TokenName, Integer)] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(TokenName, Integer)]
tks)

instance PrettyCookedList TxSkelOut where
  prettyCookedOptList :: PrettyCookedOpts -> TxSkelOut -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts TxSkelOut
output =
    [ PrettyCookedOpts -> Address -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Optic' A_Getter NoIx TxSkelOut Address -> TxSkelOut -> Address
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Getter NoIx TxSkelOut Address
txSkelOutAddressG TxSkelOut
output),
      PrettyCookedOpts -> Value -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Optic' A_Lens NoIx TxSkelOut Value -> TxSkelOut -> Value
forall k (is :: IxList) s a.
Is k A_Getter =>
Optic' k is s a -> s -> a
view Optic' A_Lens NoIx TxSkelOut Value
txSkelOutValueL TxSkelOut
output)
    ]
      [DocCooked] -> [DocCooked] -> [DocCooked]
forall a. [a] -> [a] -> [a]
++ [Maybe DocCooked] -> [DocCooked]
forall a. [Maybe a] -> [a]
catMaybes
        [ PrettyCookedOpts -> TxSkelOutDatum -> Maybe DocCooked
forall a.
PrettyCookedMaybe a =>
PrettyCookedOpts -> a -> Maybe DocCooked
prettyCookedOptMaybe PrettyCookedOpts
opts (TxSkelOut
output TxSkelOut
-> Optic' A_Lens NoIx TxSkelOut TxSkelOutDatum -> TxSkelOutDatum
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx TxSkelOut TxSkelOutDatum
txSkelOutDatumL),
          (DocCooked
"Reference script hash:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (ScriptHash -> DocCooked) -> ScriptHash -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrettyCookedOpts -> ScriptHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (ScriptHash -> DocCooked) -> Maybe ScriptHash -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Optic' An_AffineFold NoIx TxSkelOut ScriptHash
-> TxSkelOut -> Maybe ScriptHash
forall k (is :: IxList) s a.
Is k An_AffineFold =>
Optic' k is s a -> s -> Maybe a
preview Optic' An_AffineFold NoIx TxSkelOut ScriptHash
txSkelOutReferenceScriptHashAF TxSkelOut
output
        ]

instance PrettyCooked TxSkelOut where
  prettyCookedOpt :: PrettyCookedOpts -> TxSkelOut -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxSkelOut
output =
    let txSkelOutList :: [DocCooked]
txSkelOutList = PrettyCookedOpts -> TxSkelOut -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts TxSkelOut
output
     in PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (DocCooked
"Pays to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> [DocCooked] -> DocCooked
forall a. HasCallStack => [a] -> a
head [DocCooked]
txSkelOutList) DocCooked
"-" ([DocCooked] -> [DocCooked]
forall a. HasCallStack => [a] -> [a]
tail [DocCooked]
txSkelOutList)

-- | Prints a 'TxSkelOutDatum' when different from 'NoTxSkelOutDatum'
instance PrettyCookedMaybe TxSkelOutDatum where
  prettyCookedOptMaybe :: PrettyCookedOpts -> TxSkelOutDatum -> Maybe DocCooked
prettyCookedOptMaybe PrettyCookedOpts
_ TxSkelOutDatum
NoTxSkelOutDatum = Maybe DocCooked
forall a. Maybe a
Nothing
  prettyCookedOptMaybe PrettyCookedOpts
opts (SomeTxSkelOutDatum dat
dat DatumKind
Inline) =
    DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$
      DocCooked
"Datum (inline)"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"("
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> PrettyCookedOpts -> BuiltinData -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (dat -> BuiltinData
forall a. ToData a => a -> BuiltinData
Api.toBuiltinData dat
dat)
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> DocCooked
"):"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann
PP.align (PrettyCookedOpts -> dat -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts dat
dat)
  prettyCookedOptMaybe PrettyCookedOpts
opts (SomeTxSkelOutDatum dat
dat (Hashed DatumResolved
NotResolved)) =
    DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$
      DocCooked
"Datum (hashed, hidden)"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"("
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> PrettyCookedOpts -> BuiltinData -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (dat -> BuiltinData
forall a. ToData a => a -> BuiltinData
Api.toBuiltinData dat
dat)
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> DocCooked
"):"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann
PP.align (PrettyCookedOpts -> dat -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts dat
dat)
  prettyCookedOptMaybe PrettyCookedOpts
opts (SomeTxSkelOutDatum dat
dat (Hashed DatumResolved
Resolved)) =
    DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$
      DocCooked
"Datum (hashed, visible)"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"("
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> PrettyCookedOpts -> BuiltinData -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (dat -> BuiltinData
forall a. ToData a => a -> BuiltinData
Api.toBuiltinData dat
dat)
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> DocCooked
"):"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann
PP.align (PrettyCookedOpts -> dat -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts dat
dat)

-- | Pretty-print a list of transaction skeleton options, only printing an
-- option if its value is non-default.
instance PrettyCookedList TxSkelOpts where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> TxSkelOpts -> [Maybe DocCooked]
prettyCookedOptListMaybe
    PrettyCookedOpts
opts
    ( TxSkelOpts
        Bool
txSkelOptAutoSlotIncrease
        Tx ConwayEra -> Tx ConwayEra
_
        BalancingPolicy
txSkelOptBalancingPolicy
        FeePolicy
txSkelOptFeePolicy
        BalanceOutputPolicy
txSkelOptBalanceOutputPolicy
        BalancingUtxos
txSkelOptBalancingUtxos
        Params -> Params
_
        CollateralUtxos
txSkelOptCollateralUtxos
      ) =
      [ Bool -> (Bool -> DocCooked) -> Bool -> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot Bool
True Bool -> DocCooked
prettyAutoSlotIncrease Bool
txSkelOptAutoSlotIncrease,
        BalanceOutputPolicy
-> (BalanceOutputPolicy -> DocCooked)
-> BalanceOutputPolicy
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot BalanceOutputPolicy
forall a. Default a => a
def BalanceOutputPolicy -> DocCooked
prettyBalanceOutputPolicy BalanceOutputPolicy
txSkelOptBalanceOutputPolicy,
        FeePolicy
-> (FeePolicy -> DocCooked) -> FeePolicy -> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot FeePolicy
forall a. Default a => a
def FeePolicy -> DocCooked
prettyBalanceFeePolicy FeePolicy
txSkelOptFeePolicy,
        BalancingPolicy
-> (BalancingPolicy -> DocCooked)
-> BalancingPolicy
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot BalancingPolicy
forall a. Default a => a
def BalancingPolicy -> DocCooked
prettyBalancingPolicy BalancingPolicy
txSkelOptBalancingPolicy,
        BalancingUtxos
-> (BalancingUtxos -> DocCooked)
-> BalancingUtxos
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot BalancingUtxos
forall a. Default a => a
def BalancingUtxos -> DocCooked
prettyBalancingUtxos BalancingUtxos
txSkelOptBalancingUtxos,
        CollateralUtxos
-> (CollateralUtxos -> DocCooked)
-> CollateralUtxos
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot CollateralUtxos
forall a. Default a => a
def CollateralUtxos -> DocCooked
prettyCollateralUtxos CollateralUtxos
txSkelOptCollateralUtxos
      ]
      where
        prettyIfNot :: (Eq a) => a -> (a -> DocCooked) -> a -> Maybe DocCooked
        prettyIfNot :: forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot a
defaultValue a -> DocCooked
f a
x
          | a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
defaultValue Bool -> Bool -> Bool
&& Bool -> Bool
not (PrettyCookedOpts -> Bool
pcOptPrintDefaultTxSkelOpts PrettyCookedOpts
opts) = Maybe DocCooked
forall a. Maybe a
Nothing
          | Bool
otherwise = DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ a -> DocCooked
f a
x
        prettyAutoSlotIncrease :: Bool -> DocCooked
        prettyAutoSlotIncrease :: Bool -> DocCooked
prettyAutoSlotIncrease Bool
True = DocCooked
"Automatic slot increase"
        prettyAutoSlotIncrease Bool
False = DocCooked
"No automatic slot increase"
        prettyBalanceOutputPolicy :: BalanceOutputPolicy -> DocCooked
        prettyBalanceOutputPolicy :: BalanceOutputPolicy -> DocCooked
prettyBalanceOutputPolicy BalanceOutputPolicy
AdjustExistingOutput = DocCooked
"Balance policy: Adjust existing outputs"
        prettyBalanceOutputPolicy BalanceOutputPolicy
DontAdjustExistingOutput = DocCooked
"Balance policy: Don't adjust existing outputs"
        prettyBalancingPolicy :: BalancingPolicy -> DocCooked
        prettyBalancingPolicy :: BalancingPolicy -> DocCooked
prettyBalancingPolicy BalancingPolicy
BalanceWithFirstSignatory = DocCooked
"Balance with first signatory"
        prettyBalancingPolicy (BalanceWith pkh
w) = DocCooked
"Balance with" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash pkh
w)
        prettyBalancingPolicy BalancingPolicy
DoNotBalance = DocCooked
"Do not balance"
        prettyCollateralUtxos :: CollateralUtxos -> DocCooked
        prettyCollateralUtxos :: CollateralUtxos -> DocCooked
prettyCollateralUtxos CollateralUtxos
CollateralUtxosFromBalancingUser =
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
            PrettyCookedOpts
opts
            DocCooked
"Collateral policy:"
            DocCooked
"-"
            [ DocCooked
"Use value-only utxos from balancing user" :: DocCooked,
              DocCooked
"Send return collaterals to balancing user"
            ]
        prettyCollateralUtxos (CollateralUtxosFromUser pkh
w)
          | DocCooked
prettyUser <- PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash pkh
w) =
              PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
                PrettyCookedOpts
opts
                DocCooked
"Collateral policy:"
                DocCooked
"-"
                [ DocCooked
"Use value-only utxos from" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
prettyUser,
                  DocCooked
"Send return collaterals to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
prettyUser
                ]
        prettyCollateralUtxos (CollateralUtxosFromSet Set TxOutRef
txOutRefs pkh
w) =
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
            PrettyCookedOpts
opts
            DocCooked
"Collateral policy:"
            DocCooked
"-"
            [ PrettyCookedOpts
-> DocCooked -> DocCooked -> Set TxOutRef -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Choose among the following TxOutRefs:" DocCooked
"-" Set TxOutRef
txOutRefs,
              DocCooked
"Send return collaterals to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (pkh -> PubKeyHash
forall a. ToPubKeyHash a => a -> PubKeyHash
Script.toPubKeyHash pkh
w)
            ]
        prettyBalancingUtxos :: BalancingUtxos -> DocCooked
        prettyBalancingUtxos :: BalancingUtxos -> DocCooked
prettyBalancingUtxos BalancingUtxos
BalancingUtxosFromBalancingUser = DocCooked
"Balance with 'only value' utxos from the balancing user"
        prettyBalancingUtxos (BalancingUtxosFromSet Set TxOutRef
utxos) = PrettyCookedOpts
-> DocCooked -> DocCooked -> Set TxOutRef -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Balance with the following utxos:" DocCooked
"-" Set TxOutRef
utxos
        prettyBalanceFeePolicy :: FeePolicy -> DocCooked
        prettyBalanceFeePolicy :: FeePolicy -> DocCooked
prettyBalanceFeePolicy FeePolicy
AutoFeeComputation = DocCooked
"Use automatically computed fee"
        prettyBalanceFeePolicy (ManualFee Integer
fee) = DocCooked
"Use the following fee:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Integer -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Integer
fee

-- | Resolves a "TxOutRef" from a given context, builds a doc cooked for its
-- address and value, and also builds a possibly empty list for its datum and
-- reference script when they exist.
instance PrettyCookedList (Contextualized Api.TxOutRef) where
  prettyCookedOptList :: PrettyCookedOpts -> Contextualized TxOutRef -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (Contextualized Map TxOutRef (TxSkelOut, Bool)
managedTxOuts TxOutRef
txOutRef) =
    [DocCooked]
-> ((TxSkelOut, Bool) -> [DocCooked])
-> Maybe (TxSkelOut, Bool)
-> [DocCooked]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (PrettyCookedOpts -> TxSkelOut -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (TxSkelOut -> [DocCooked])
-> ((TxSkelOut, Bool) -> TxSkelOut)
-> (TxSkelOut, Bool)
-> [DocCooked]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxSkelOut, Bool) -> TxSkelOut
forall a b. (a, b) -> a
fst) (TxOutRef
-> Map TxOutRef (TxSkelOut, Bool) -> Maybe (TxSkelOut, Bool)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup TxOutRef
txOutRef Map TxOutRef (TxSkelOut, Bool)
managedTxOuts)

data Input = Input
  { Input -> TxOutRef
inputORef :: Api.TxOutRef,
    Input -> TxSkelRedeemer
inputRed :: TxSkelRedeemer
  }

instance PrettyCooked (Contextualized Input) where
  prettyCookedOpt :: PrettyCookedOpts -> Contextualized Input -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts cIn :: Contextualized Input
cIn@(Contextualized Map TxOutRef (TxSkelOut, Bool)
_ Input
input) =
    case PrettyCookedOpts -> Contextualized TxOutRef -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (Input -> TxOutRef
inputORef (Input -> TxOutRef)
-> Contextualized Input -> Contextualized TxOutRef
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Contextualized Input
cIn) of
      (DocCooked
addressDoc : [DocCooked]
otherDocs) ->
        PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
          PrettyCookedOpts
opts
          ( DocCooked
"Spends"
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> TxOutRef -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Input -> TxOutRef
inputORef Input
input)
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"from"
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
addressDoc
          )
          DocCooked
"-"
          (PrettyCookedOpts -> TxSkelRedeemer -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (Input -> TxSkelRedeemer
inputRed Input
input) [DocCooked] -> [DocCooked] -> [DocCooked]
forall a. Semigroup a => a -> a -> a
<> [DocCooked]
otherDocs)
      [DocCooked]
_ -> DocCooked
"Spends" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> TxOutRef -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Input -> TxOutRef
inputORef Input
input) DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"(non resolved)"

newtype ReferenceInput = ReferenceInput {ReferenceInput -> TxOutRef
unReferenceInput :: Api.TxOutRef}

instance PrettyCooked (Contextualized ReferenceInput) where
  prettyCookedOpt :: PrettyCookedOpts -> Contextualized ReferenceInput -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts cRefIn :: Contextualized ReferenceInput
cRefIn@(Contextualized Map TxOutRef (TxSkelOut, Bool)
_ (ReferenceInput TxOutRef
txOutRef)) =
    case PrettyCookedOpts -> Contextualized TxOutRef -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (ReferenceInput -> TxOutRef
unReferenceInput (ReferenceInput -> TxOutRef)
-> Contextualized ReferenceInput -> Contextualized TxOutRef
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Contextualized ReferenceInput
cRefIn) of
      (DocCooked
addressDoc : [DocCooked]
otherDocs) ->
        PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize
          PrettyCookedOpts
opts
          ( DocCooked
"References output"
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> TxOutRef -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxOutRef
txOutRef
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"from"
              DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
addressDoc
          )
          DocCooked
"-"
          [DocCooked]
otherDocs
      [DocCooked]
_ -> DocCooked
"References" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> TxOutRef -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxOutRef
txOutRef DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"(non resolved)"