{-# LANGUAGE TemplateHaskell #-}
module Cooked.MockChain.Log
(
MockChainLogEntry (..),
MockChainLog,
runMockChainLog,
logEvent,
)
where
import Cooked.MockChain.Common
import Cooked.Skeleton
import Plutus.Script.Utils.Scripts qualified as Script
import PlutusLedgerApi.V3 qualified as Api
import Polysemy
import Polysemy.Writer
data MockChainLogEntry
=
MCLogSubmittedTxSkel TxSkel
|
MCLogAdjustedTxSkel TxSkel Fee (Maybe Collaterals)
|
MCLogNewTx Api.TxId Integer
|
MCLogDiscardedUtxos Integer String
|
MCLogUnusedCollaterals (Either Peer CollateralIns)
|
MCLogAddedReferenceScript TxSkelRedeemer Api.TxOutRef Script.ScriptHash
|
MCLogAutoFilledWithdrawalAmount Api.Credential Api.Lovelace
|
MCLogAutoFilledConstitution Api.ScriptHash
|
MCLogAdjustedTxSkelOut TxSkelOut Api.Lovelace
deriving (Int -> MockChainLogEntry -> ShowS
[MockChainLogEntry] -> ShowS
MockChainLogEntry -> String
(Int -> MockChainLogEntry -> ShowS)
-> (MockChainLogEntry -> String)
-> ([MockChainLogEntry] -> ShowS)
-> Show MockChainLogEntry
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MockChainLogEntry -> ShowS
showsPrec :: Int -> MockChainLogEntry -> ShowS
$cshow :: MockChainLogEntry -> String
show :: MockChainLogEntry -> String
$cshowList :: [MockChainLogEntry] -> ShowS
showList :: [MockChainLogEntry] -> ShowS
Show)
data MockChainLog :: Effect where
LogEvent :: MockChainLogEntry -> MockChainLog m ()
makeSem_ ''MockChainLog
runMockChainLog ::
(Member (Writer j) effs) =>
(MockChainLogEntry -> j) ->
Sem (MockChainLog : effs) a ->
Sem effs a
runMockChainLog :: forall j (effs :: EffectRow) a.
Member (Writer j) effs =>
(MockChainLogEntry -> j)
-> Sem (MockChainLog : effs) a -> Sem effs a
runMockChainLog MockChainLogEntry -> j
inject = (forall (rInitial :: EffectRow) x.
MockChainLog (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainLog : effs) a -> Sem effs a
forall (e :: Effect) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret ((forall (rInitial :: EffectRow) x.
MockChainLog (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainLog : effs) a -> Sem effs a)
-> (forall (rInitial :: EffectRow) x.
MockChainLog (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainLog : effs) a
-> Sem effs a
forall a b. (a -> b) -> a -> b
$ \(LogEvent MockChainLogEntry
event) -> j -> Sem effs ()
forall o (r :: EffectRow). Member (Writer o) r => o -> Sem r ()
tell (j -> Sem effs ()) -> j -> Sem effs ()
forall a b. (a -> b) -> a -> b
$ MockChainLogEntry -> j
inject MockChainLogEntry
event
logEvent :: (Member MockChainLog effs) => MockChainLogEntry -> Sem effs ()