{-# 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.Output
import Cooked.Pretty.Class
import Cooked.Pretty.Options
import Cooked.Pretty.Plutus ()
import Cooked.Skeleton
import Cooked.Wallet
import Data.Default
import Data.Map (Map)
import Data.Map qualified as Map
import Data.Maybe (catMaybes, fromMaybe)
import Data.Set qualified as Set
import Optics.Core
import Plutus.Script.Utils.Data qualified as Script
import Plutus.Script.Utils.Scripts qualified as Script
import Plutus.Script.Utils.Value qualified as Script
import PlutusLedgerApi.V1.Value qualified as Api
import PlutusLedgerApi.V3 qualified as Api
import Prettyprinter ((<+>))
import Prettyprinter qualified as PP

instance PrettyCooked Wallet where
  prettyCookedOpt :: PrettyCookedOpts -> Wallet -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts = PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (PubKeyHash -> DocCooked)
-> (Wallet -> PubKeyHash) -> Wallet -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Wallet -> PubKeyHash
walletPKHash

-- | 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 TxOut
_ctxOutputs :: Map Api.TxOutRef Api.TxOut,
    forall a. Contextualized a -> Map DatumHash TxSkelOutDatum
_ctxDatums :: Map Api.DatumHash TxSkelOutDatum,
    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 TxLabel
lbl TxOpts
txopts TxSkelMints
mints [Wallet]
signers SlotRange
validityRange Map TxOutRef TxSkelRedeemer
ins Set TxOutRef
insReference [TxSkelOut]
outs [TxSkelProposal]
proposals TxSkelWithdrawals
withdrawals <- Contextualized TxSkel -> TxSkel
forall a. Contextualized a -> a
ctxContent Contextualized TxSkel
cTxSkel =
        [ PrettyCookedOpts
-> DocCooked -> DocCooked -> Set TxLabel -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Labels:" DocCooked
"-" Set TxLabel
lbl,
          PrettyCookedOpts
-> DocCooked -> DocCooked -> [Mint] -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Mints:" DocCooked
"-" (TxSkelMints -> [Mint]
txSkelMintsToList 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 -> (TxOpts, [Wallet]) -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Signers:" DocCooked
"-" (TxOpts
txopts, [Wallet]
signers),
          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
"-" ((Either (Versioned Script) PubKeyHash, (TxSkelRedeemer, Lovelace))
-> Withdrawal
mkWithdrawal ((Either (Versioned Script) PubKeyHash, (TxSkelRedeemer, Lovelace))
 -> Withdrawal)
-> [(Either (Versioned Script) PubKeyHash,
     (TxSkelRedeemer, Lovelace))]
-> [Withdrawal]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TxSkelWithdrawals
-> [(Either (Versioned Script) PubKeyHash,
     (TxSkelRedeemer, Lovelace))]
forall k a. Map k a -> [(k, a)]
Map.toList TxSkelWithdrawals
withdrawals),
          PrettyCookedOpts
-> DocCooked -> DocCooked -> TxOpts -> Maybe DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> Maybe DocCooked
prettyItemizeNonEmpty PrettyCookedOpts
opts DocCooked
"Options:" DocCooked
"-" TxOpts
txopts
        ]

data Withdrawal = Withdrawal (Either (Script.Versioned Script.Script) Api.PubKeyHash) TxSkelRedeemer Api.Lovelace

mkWithdrawal :: (Either (Script.Versioned Script.Script) Api.PubKeyHash, (TxSkelRedeemer, Api.Lovelace)) -> Withdrawal
mkWithdrawal :: (Either (Versioned Script) PubKeyHash, (TxSkelRedeemer, Lovelace))
-> Withdrawal
mkWithdrawal (Either (Versioned Script) PubKeyHash
owner, (TxSkelRedeemer
red, Lovelace
lv)) = Either (Versioned Script) PubKeyHash
-> TxSkelRedeemer -> Lovelace -> Withdrawal
Withdrawal Either (Versioned Script) PubKeyHash
owner TxSkelRedeemer
red Lovelace
lv

instance PrettyCooked Withdrawal where
  prettyCookedOpt :: PrettyCookedOpts -> Withdrawal -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Withdrawal Either (Versioned Script) PubKeyHash
cred TxSkelRedeemer
red Lovelace
ada) =
    PrettyCookedOpts -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> a -> DocCooked
prettyItemizeNoTitle PrettyCookedOpts
opts DocCooked
"-" ([DocCooked] -> DocCooked) -> [DocCooked] -> DocCooked
forall a b. (a -> b) -> a -> b
$
      ( case Either (Versioned Script) PubKeyHash
cred of
          Left Versioned Script
script -> PrettyCookedOpts -> Versioned Script -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts Versioned Script
script DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> TxSkelRedeemer -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts TxSkelRedeemer
red
          Right PubKeyHash
pkh -> [PrettyCookedOpts -> PubKeyHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts PubKeyHash
pkh]
      )
        [DocCooked] -> [DocCooked] -> [DocCooked]
forall a. [a] -> [a] -> [a]
++ [PrettyCookedOpts -> Value -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Lovelace -> Value
forall a. ToValue a => a -> Value
Script.toValue Lovelace
ada)]

instance PrettyCooked TxParameterChange where
  prettyCookedOpt :: PrettyCookedOpts -> TxParameterChange -> 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

-- | Prints a list of docs corresponding to an instance of 'TxSkelRedeemer'
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 {Maybe String
Maybe (Versioned Script, TxSkelRedeemer)
Address
TxGovAction
txSkelProposalAddress :: Address
txSkelProposalAction :: TxGovAction
txSkelProposalWitness :: Maybe (Versioned Script, TxSkelRedeemer)
txSkelProposalAnchor :: Maybe String
txSkelProposalAddress :: TxSkelProposal -> Address
txSkelProposalAction :: TxSkelProposal -> TxGovAction
txSkelProposalWitness :: TxSkelProposal -> Maybe (Versioned Script, TxSkelRedeemer)
txSkelProposalAnchor :: TxSkelProposal -> Maybe String
..} =
    [ DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ DocCooked
"Governance action:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> TxGovAction -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts TxGovAction
txSkelProposalAction,
      DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$ DocCooked
"Return address:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Address -> DocCooked
forall a. PrettyCooked a => a -> DocCooked
prettyCooked Address
txSkelProposalAddress,
      (\(Versioned Script
script, TxSkelRedeemer
redeemer) -> PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Witness:" DocCooked
"-" (PrettyCookedOpts -> Versioned Script -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts Versioned Script
script DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> TxSkelRedeemer -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts TxSkelRedeemer
redeemer)) ((Versioned Script, TxSkelRedeemer) -> DocCooked)
-> Maybe (Versioned Script, TxSkelRedeemer) -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Versioned Script, TxSkelRedeemer)
txSkelProposalWitness,
      (DocCooked
"Anchor:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (String -> DocCooked) -> String -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> DocCooked
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
PP.pretty (String -> DocCooked) -> Maybe String -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
txSkelProposalAnchor
    ]

instance PrettyCooked TxGovAction where
  prettyCookedOpt :: PrettyCookedOpts -> TxGovAction -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxGovActionParameterChange [TxParameterChange]
params) = PrettyCookedOpts
-> DocCooked -> DocCooked -> [TxParameterChange] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts DocCooked
"Parameter changes:" DocCooked
"-" [TxParameterChange]
params
  prettyCookedOpt PrettyCookedOpts
opts (TxGovActionHardForkInitiation (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 (TxGovActionTreasuryWithdrawals 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
_ TxGovAction
TxGovActionNoConfidence = DocCooked
"No confidence"
  prettyCookedOpt PrettyCookedOpts
opts (TxGovActionUpdateCommittee [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 (TxGovActionNewConstitution (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 wallet
instance PrettyCookedList (TxOpts, [Wallet]) where
  prettyCookedOptList :: PrettyCookedOpts -> (TxOpts, [Wallet]) -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts (TxOpts {txOptBalancingPolicy :: TxOpts -> BalancingPolicy
txOptBalancingPolicy = BalancingPolicy
DoNotBalance}, [Wallet]
signers) = PrettyCookedOpts -> [Wallet] -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts [Wallet]
signers
  prettyCookedOptList PrettyCookedOpts
opts (TxOpts {txOptBalancingPolicy :: TxOpts -> BalancingPolicy
txOptBalancingPolicy = BalancingPolicy
BalanceWithFirstSigner}, Wallet
firstSigner : [Wallet]
signers) =
    PrettyCookedOpts -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
firstSigner DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"[balancing]" DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> [Wallet] -> [DocCooked]
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> a -> [DocCooked]
prettyCookedOptList PrettyCookedOpts
opts [Wallet]
signers
  prettyCookedOptList PrettyCookedOpts
opts (TxOpts {txOptBalancingPolicy :: TxOpts -> BalancingPolicy
txOptBalancingPolicy = BalanceWith Wallet
balancingWallet}, [Wallet]
signers) =
    (\Wallet
s -> if Wallet
s Wallet -> Wallet -> Bool
forall a. Eq a => a -> a -> Bool
== Wallet
balancingWallet then PrettyCookedOpts -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
s DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"[balancing]" else PrettyCookedOpts -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
s) (Wallet -> DocCooked) -> [Wallet] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Wallet]
signers
  -- The following case should never happen for real transactions
  prettyCookedOptList PrettyCookedOpts
_ (TxOpts
_, []) = []

-- | 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 a
pol TxSkelRedeemer
red [(TokenName, Integer)]
tks) =
    PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (PrettyCookedOpts -> Versioned MintingPolicy -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (forall s a. ToVersioned s a => a -> Versioned s
Script.toVersioned @Script.MintingPolicy a
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 PrettyCooked TxSkelOut where
  prettyCookedOpt :: PrettyCookedOpts -> TxSkelOut -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (Pays o
output) =
    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
<+> PrettyCookedOpts -> Address -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (o -> Address
forall o.
(IsAbstractOutput o, ToCredential (OwnerType o)) =>
o -> Address
outputAddress o
output))
      DocCooked
"-"
      ( PrettyCookedOpts -> Value -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (o -> Value
forall o. (IsAbstractOutput o, ToValue (ValueType o)) => o -> Value
outputValue o
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 (o
output o -> Optic' A_Lens NoIx o TxSkelOutDatum -> TxSkelOutDatum
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Lens' o (DatumType o)
Optic' A_Lens NoIx o TxSkelOutDatum
forall o. IsAbstractOutput o => Lens' o (DatumType o)
outputDatumL),
              (DocCooked
"Reference script hash:" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+>) (DocCooked -> DocCooked)
-> (ReferenceScriptType o -> DocCooked)
-> ReferenceScriptType o
-> 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)
-> (ReferenceScriptType o -> ScriptHash)
-> ReferenceScriptType o
-> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReferenceScriptType o -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
Script.toScriptHash (ReferenceScriptType o -> DocCooked)
-> Maybe (ReferenceScriptType o) -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> o
output o
-> Optic' A_Lens NoIx o (Maybe (ReferenceScriptType o))
-> Maybe (ReferenceScriptType o)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx o (Maybe (ReferenceScriptType o))
forall o.
IsAbstractOutput o =>
Lens' o (Maybe (ReferenceScriptType o))
outputReferenceScriptL
            ]
      )

-- | Prints a 'TxSkelOutDatum' when different from 'TxSkelOutNoDatum'
instance PrettyCookedMaybe TxSkelOutDatum where
  prettyCookedOptMaybe :: PrettyCookedOpts -> TxSkelOutDatum -> Maybe DocCooked
prettyCookedOptMaybe PrettyCookedOpts
_ TxSkelOutDatum
TxSkelOutNoDatum = Maybe DocCooked
forall a. Maybe a
Nothing
  prettyCookedOptMaybe PrettyCookedOpts
opts (TxSkelOutInlineDatum a
dat) =
    DocCooked -> Maybe DocCooked
forall a. a -> Maybe a
Just (DocCooked -> Maybe DocCooked) -> DocCooked -> Maybe DocCooked
forall a b. (a -> b) -> a -> b
$
      DocCooked
"Datum (inlined):"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann
PP.align (PrettyCookedOpts -> a -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts a
dat)
  prettyCookedOptMaybe PrettyCookedOpts
opts (TxSkelOutDatumHash a
dat) =
    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, invisible)"
        DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"("
        DocCooked -> DocCooked -> DocCooked
forall a. Semigroup a => a -> a -> a
<> PrettyCookedOpts -> DatumHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (Datum -> DatumHash
Script.datumHash (Datum -> DatumHash) -> Datum -> DatumHash
forall a b. (a -> b) -> a -> b
$ BuiltinData -> Datum
Api.Datum (BuiltinData -> Datum) -> BuiltinData -> Datum
forall a b. (a -> b) -> a -> b
$ a -> BuiltinData
forall a. ToData a => a -> BuiltinData
Api.toBuiltinData a
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 -> a -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts a
dat)
  prettyCookedOptMaybe PrettyCookedOpts
opts (TxSkelOutDatum a
dat) =
    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 -> DatumHash -> DocCooked
forall a. ToHash a => PrettyCookedOpts -> a -> DocCooked
prettyHash PrettyCookedOpts
opts (Datum -> DatumHash
Script.datumHash (Datum -> DatumHash) -> Datum -> DatumHash
forall a b. (a -> b) -> a -> b
$ BuiltinData -> Datum
Api.Datum (BuiltinData -> Datum) -> BuiltinData -> Datum
forall a b. (a -> b) -> a -> b
$ a -> BuiltinData
forall a. ToData a => a -> BuiltinData
Api.toBuiltinData a
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 -> a -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts a
dat)

-- | Pretty-print a list of transaction skeleton options, only printing an
-- option if its value is non-default.
instance PrettyCookedList TxOpts where
  prettyCookedOptListMaybe :: PrettyCookedOpts -> TxOpts -> [Maybe DocCooked]
prettyCookedOptListMaybe
    PrettyCookedOpts
opts
    TxOpts
      { Bool
txOptAutoSlotIncrease :: Bool
txOptAutoSlotIncrease :: TxOpts -> Bool
txOptAutoSlotIncrease,
        [RawModTx]
txOptUnsafeModTx :: [RawModTx]
txOptUnsafeModTx :: TxOpts -> [RawModTx]
txOptUnsafeModTx,
        BalanceOutputPolicy
txOptBalanceOutputPolicy :: BalanceOutputPolicy
txOptBalanceOutputPolicy :: TxOpts -> BalanceOutputPolicy
txOptBalanceOutputPolicy,
        FeePolicy
txOptFeePolicy :: FeePolicy
txOptFeePolicy :: TxOpts -> FeePolicy
txOptFeePolicy,
        BalancingPolicy
txOptBalancingPolicy :: TxOpts -> BalancingPolicy
txOptBalancingPolicy :: BalancingPolicy
txOptBalancingPolicy,
        BalancingUtxos
txOptBalancingUtxos :: BalancingUtxos
txOptBalancingUtxos :: TxOpts -> BalancingUtxos
txOptBalancingUtxos,
        Maybe EmulatorParamsModification
txOptEmulatorParamsModification :: Maybe EmulatorParamsModification
txOptEmulatorParamsModification :: TxOpts -> Maybe EmulatorParamsModification
txOptEmulatorParamsModification,
        CollateralUtxos
txOptCollateralUtxos :: CollateralUtxos
txOptCollateralUtxos :: TxOpts -> CollateralUtxos
txOptCollateralUtxos,
        AnchorResolution
txOptAnchorResolution :: AnchorResolution
txOptAnchorResolution :: TxOpts -> AnchorResolution
txOptAnchorResolution
      } =
      [ Bool -> (Bool -> DocCooked) -> Bool -> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot Bool
True Bool -> DocCooked
prettyAutoSlotIncrease Bool
txOptAutoSlotIncrease,
        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
txOptBalanceOutputPolicy,
        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
txOptFeePolicy,
        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
txOptBalancingPolicy,
        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
txOptBalancingUtxos,
        [RawModTx]
-> ([RawModTx] -> DocCooked) -> [RawModTx] -> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot [] [RawModTx] -> DocCooked
prettyUnsafeModTx [RawModTx]
txOptUnsafeModTx,
        Maybe EmulatorParamsModification
-> (Maybe EmulatorParamsModification -> DocCooked)
-> Maybe EmulatorParamsModification
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot Maybe EmulatorParamsModification
forall a. Default a => a
def Maybe EmulatorParamsModification -> DocCooked
prettyEmulatorParamsModification Maybe EmulatorParamsModification
txOptEmulatorParamsModification,
        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
txOptCollateralUtxos,
        AnchorResolution
-> (AnchorResolution -> DocCooked)
-> AnchorResolution
-> Maybe DocCooked
forall a. Eq a => a -> (a -> DocCooked) -> a -> Maybe DocCooked
prettyIfNot AnchorResolution
forall a. Default a => a
def AnchorResolution -> DocCooked
prettyAnchorResolution AnchorResolution
txOptAnchorResolution
      ]
      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
pcOptPrintDefaultTxOpts 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
BalanceWithFirstSigner = DocCooked
"Balance with first signer"
        prettyBalancingPolicy (BalanceWith Wallet
w) = DocCooked
"Balance with" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> PrettyCookedOpts -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
w
        prettyBalancingPolicy BalancingPolicy
DoNotBalance = DocCooked
"Do not balance"
        prettyUnsafeModTx :: [RawModTx] -> DocCooked
        prettyUnsafeModTx :: [RawModTx] -> DocCooked
prettyUnsafeModTx [] = DocCooked
"No transaction modifications"
        prettyUnsafeModTx ([RawModTx] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length -> Int
n) = PrettyCookedOpts -> Int -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Int
n DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
"transaction" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked -> DocCooked -> Int -> DocCooked
forall amount doc.
(Num amount, Eq amount) =>
doc -> doc -> amount -> doc
PP.plural DocCooked
"modification" DocCooked
"modifications" Int
n
        prettyEmulatorParamsModification :: Maybe EmulatorParamsModification -> DocCooked
        prettyEmulatorParamsModification :: Maybe EmulatorParamsModification -> DocCooked
prettyEmulatorParamsModification Maybe EmulatorParamsModification
Nothing = DocCooked
"No modifications of protocol paramters"
        prettyEmulatorParamsModification Just {} = DocCooked
"With modifications of protocol parameters"
        prettyCollateralUtxos :: CollateralUtxos -> DocCooked
        prettyCollateralUtxos :: CollateralUtxos -> DocCooked
prettyCollateralUtxos CollateralUtxos
CollateralUtxosFromBalancingWallet =
          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 wallet" :: DocCooked,
              DocCooked
"Send return collaterals to balancing wallet"
            ]
        prettyCollateralUtxos (CollateralUtxosFromWallet Wallet
w)
          | DocCooked
prettyWallet <- PrettyCookedOpts -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
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
prettyWallet,
                  DocCooked
"Send return collaterals to" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
prettyWallet
                ]
        prettyCollateralUtxos (CollateralUtxosFromSet Set TxOutRef
txOutRefs Wallet
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 -> Wallet -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts Wallet
w
            ]
        prettyBalancingUtxos :: BalancingUtxos -> DocCooked
        prettyBalancingUtxos :: BalancingUtxos -> DocCooked
prettyBalancingUtxos BalancingUtxos
BalancingUtxosFromBalancingWallet = DocCooked
"Balance with 'only value' utxos from the balancing wallet"
        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
        prettyAnchorResolution :: AnchorResolution -> DocCooked
        prettyAnchorResolution :: AnchorResolution -> DocCooked
prettyAnchorResolution AnchorResolution
AnchorResolutionHttp = DocCooked
"Resolve anchor url with an (unsafe) http connection"
        prettyAnchorResolution (AnchorResolutionLocal Map String ByteString
urlMap) =
          forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize @[DocCooked] PrettyCookedOpts
opts DocCooked
"Resolve anchor url with the following table keys" DocCooked
"-" (String -> DocCooked
forall a ann. Show a => a -> Doc ann
PP.viaShow (String -> DocCooked) -> [String] -> [DocCooked]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map String ByteString -> [String]
forall k a. Map k a -> [k]
Map.keys Map String ByteString
urlMap)

-- | 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 TxOut
managedTxOuts Map DatumHash TxSkelOutDatum
managedTxSkelOutDatums TxOutRef
txOutRef) = [DocCooked] -> Maybe [DocCooked] -> [DocCooked]
forall a. a -> Maybe a -> a
fromMaybe [] (Maybe [DocCooked] -> [DocCooked])
-> Maybe [DocCooked] -> [DocCooked]
forall a b. (a -> b) -> a -> b
$ do
    TxOut
output <- TxOutRef -> Map TxOutRef TxOut -> Maybe TxOut
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup TxOutRef
txOutRef Map TxOutRef TxOut
managedTxOuts
    TxSkelOutDatum
txSkelOutDatum <- case TxOut -> OutputDatum
forall o.
(IsAbstractOutput o, ToOutputDatum (DatumType o)) =>
o -> OutputDatum
outputOutputDatum TxOut
output of
      Api.OutputDatum Datum
datum -> DatumHash -> Map DatumHash TxSkelOutDatum -> Maybe TxSkelOutDatum
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (Datum -> DatumHash
Script.datumHash Datum
datum) Map DatumHash TxSkelOutDatum
managedTxSkelOutDatums
      Api.OutputDatumHash DatumHash
datumHash -> DatumHash -> Map DatumHash TxSkelOutDatum -> Maybe TxSkelOutDatum
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup DatumHash
datumHash Map DatumHash TxSkelOutDatum
managedTxSkelOutDatums
      OutputDatum
Api.NoOutputDatum -> TxSkelOutDatum -> Maybe TxSkelOutDatum
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return TxSkelOutDatum
TxSkelOutNoDatum
    [DocCooked] -> Maybe [DocCooked]
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return
      ( PrettyCookedOpts -> Address -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxOut -> Address
forall o.
(IsAbstractOutput o, ToCredential (OwnerType o)) =>
o -> Address
outputAddress TxOut
output)
          DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: PrettyCookedOpts -> Value -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
prettyCookedOpt PrettyCookedOpts
opts (TxOut -> Value
forall o. (IsAbstractOutput o, ToValue (ValueType o)) => o -> Value
outputValue TxOut
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 TxSkelOutDatum
txSkelOutDatum,
              (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)
-> (ScriptHash -> ScriptHash) -> ScriptHash -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ScriptHash -> ScriptHash
forall a. ToScriptHash a => a -> ScriptHash
Script.toScriptHash (ScriptHash -> DocCooked) -> Maybe ScriptHash -> Maybe DocCooked
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TxOut
output TxOut
-> Optic' A_Lens NoIx TxOut (Maybe ScriptHash) -> Maybe ScriptHash
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx TxOut (Maybe ScriptHash)
Lens' TxOut (Maybe (ReferenceScriptType TxOut))
forall o.
IsAbstractOutput o =>
Lens' o (Maybe (ReferenceScriptType o))
outputReferenceScriptL
            ]
      )

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 TxOut
_ Map DatumHash TxSkelOutDatum
_ 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
valueDoc : [DocCooked]
otherDocs) ->
        PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (DocCooked
"Spends from" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
addressDoc) DocCooked
"-" (DocCooked
valueDoc DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: 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 TxOut
_ Map DatumHash TxSkelOutDatum
_ (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
valueDoc : [DocCooked]
otherDocs) ->
        PrettyCookedOpts
-> DocCooked -> DocCooked -> [DocCooked] -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (DocCooked
"References output from" DocCooked -> DocCooked -> DocCooked
forall ann. Doc ann -> Doc ann -> Doc ann
<+> DocCooked
addressDoc) DocCooked
"-" (DocCooked
valueDoc DocCooked -> [DocCooked] -> [DocCooked]
forall a. a -> [a] -> [a]
: [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)"