module Cooked.Skeleton.Redeemer
( TxSkelRedeemer (..),
RedeemerConstrs,
withReferenceInput,
someTxSkelRedeemer,
emptyTxSkelRedeemer,
getTypedRedeemer,
setTypedRedeemer,
someTxSkelRedeemerNoAutoFill,
emptyTxSkelRedeemerNoAutoFill,
)
where
import Cooked.Pretty.Class
import Data.Typeable (Typeable, cast)
import PlutusLedgerApi.V3 qualified as Api
import PlutusTx.Prelude qualified as PlutusTx
type RedeemerConstrs redeemer =
( Api.ToData redeemer,
Show redeemer,
PrettyCooked redeemer,
PlutusTx.Eq redeemer,
Typeable redeemer
)
data TxSkelRedeemer where
TxSkelRedeemer ::
(RedeemerConstrs redeemer) =>
{
()
txSkelRedeemerContent :: redeemer,
TxSkelRedeemer -> Maybe TxOutRef
txSkelRedeemerReferenceInput :: Maybe Api.TxOutRef,
TxSkelRedeemer -> Bool
txSkelRedeemerAutoFill :: Bool
} ->
TxSkelRedeemer
deriving instance (Show TxSkelRedeemer)
instance Eq TxSkelRedeemer where
(TxSkelRedeemer redeemer
red Maybe TxOutRef
mRefIn Bool
af) == :: TxSkelRedeemer -> TxSkelRedeemer -> Bool
== TxSkelRedeemer redeemer
red' Maybe TxOutRef
mRefIn' Bool
af' =
redeemer -> Maybe redeemer
forall a b. (Typeable a, Typeable b) => a -> Maybe b
cast redeemer
red Maybe redeemer -> Maybe redeemer -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== redeemer -> Maybe redeemer
forall a. a -> Maybe a
Just redeemer
red' Bool -> Bool -> Bool
PlutusTx.&& Maybe TxOutRef
mRefIn Maybe TxOutRef -> Maybe TxOutRef -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Maybe TxOutRef
mRefIn' Bool -> Bool -> Bool
PlutusTx.&& Bool
af Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Bool
af'
getTypedRedeemer :: (Typeable a) => TxSkelRedeemer -> Maybe a
getTypedRedeemer :: forall a. Typeable a => TxSkelRedeemer -> Maybe a
getTypedRedeemer (TxSkelRedeemer redeemer
red Maybe TxOutRef
_ Bool
_) = redeemer -> Maybe a
forall a b. (Typeable a, Typeable b) => a -> Maybe b
cast redeemer
red
setTypedRedeemer :: (RedeemerConstrs redeemer) => redeemer -> TxSkelRedeemer -> TxSkelRedeemer
setTypedRedeemer :: forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> TxSkelRedeemer -> TxSkelRedeemer
setTypedRedeemer redeemer
red TxSkelRedeemer
txSkelRed = TxSkelRedeemer
txSkelRed {txSkelRedeemerContent = red}
someTxSkelRedeemer :: (RedeemerConstrs redeemer) => redeemer -> TxSkelRedeemer
someTxSkelRedeemer :: forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> TxSkelRedeemer
someTxSkelRedeemer redeemer
red = redeemer -> Maybe TxOutRef -> Bool -> TxSkelRedeemer
forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> Maybe TxOutRef -> Bool -> TxSkelRedeemer
TxSkelRedeemer redeemer
red Maybe TxOutRef
forall a. Maybe a
Nothing Bool
True
someTxSkelRedeemerNoAutoFill :: (RedeemerConstrs redeemer) => redeemer -> TxSkelRedeemer
someTxSkelRedeemerNoAutoFill :: forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> TxSkelRedeemer
someTxSkelRedeemerNoAutoFill redeemer
red = redeemer -> Maybe TxOutRef -> Bool -> TxSkelRedeemer
forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> Maybe TxOutRef -> Bool -> TxSkelRedeemer
TxSkelRedeemer redeemer
red Maybe TxOutRef
forall a. Maybe a
Nothing Bool
False
emptyTxSkelRedeemer :: TxSkelRedeemer
emptyTxSkelRedeemer :: TxSkelRedeemer
emptyTxSkelRedeemer = () -> TxSkelRedeemer
forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> TxSkelRedeemer
someTxSkelRedeemer ()
emptyTxSkelRedeemerNoAutoFill :: TxSkelRedeemer
emptyTxSkelRedeemerNoAutoFill :: TxSkelRedeemer
emptyTxSkelRedeemerNoAutoFill = () -> TxSkelRedeemer
forall redeemer.
RedeemerConstrs redeemer =>
redeemer -> TxSkelRedeemer
someTxSkelRedeemerNoAutoFill ()
withReferenceInput :: TxSkelRedeemer -> Api.TxOutRef -> TxSkelRedeemer
withReferenceInput :: TxSkelRedeemer -> TxOutRef -> TxSkelRedeemer
withReferenceInput TxSkelRedeemer
red TxOutRef
ref = TxSkelRedeemer
red {txSkelRedeemerReferenceInput = Just ref}