module Ouroboros.Network.TxSubmission.Mempool.Reader
( TxSubmissionMempoolReader (..)
, MempoolSnapshot (..)
, mapMempoolSnapshot
, mapTxSubmissionMempoolReader
) where
import Control.Monad.Class.MonadSTM (MonadSTM, STM)
import Ouroboros.Network.SizeInBytes (SizeInBytes)
data TxSubmissionMempoolReader txid tx idx m =
TxSubmissionMempoolReader {
forall txid tx idx (m :: * -> *).
TxSubmissionMempoolReader txid tx idx m
-> STM m (MempoolSnapshot txid tx idx)
mempoolGetSnapshot :: STM m (MempoolSnapshot txid tx idx),
forall txid tx idx (m :: * -> *).
TxSubmissionMempoolReader txid tx idx m -> idx
mempoolZeroIdx :: idx
}
mapTxSubmissionMempoolReader ::
MonadSTM m
=> (tx -> tx')
-> TxSubmissionMempoolReader txid tx idx m
-> TxSubmissionMempoolReader txid tx' idx m
mapTxSubmissionMempoolReader :: forall (m :: * -> *) tx tx' txid idx.
MonadSTM m =>
(tx -> tx')
-> TxSubmissionMempoolReader txid tx idx m
-> TxSubmissionMempoolReader txid tx' idx m
mapTxSubmissionMempoolReader tx -> tx'
f TxSubmissionMempoolReader txid tx idx m
rdr =
TxSubmissionMempoolReader txid tx idx m
rdr {
mempoolGetSnapshot = mapMempoolSnapshot f <$> mempoolGetSnapshot rdr
}
data MempoolSnapshot txid tx idx =
MempoolSnapshot {
forall txid tx idx.
MempoolSnapshot txid tx idx -> idx -> [(txid, idx, SizeInBytes)]
mempoolTxIdsAfter :: idx -> [(txid, idx, SizeInBytes)],
forall txid tx idx. MempoolSnapshot txid tx idx -> idx -> Maybe tx
mempoolLookupTx :: idx -> Maybe tx,
forall txid tx idx. MempoolSnapshot txid tx idx -> txid -> Bool
mempoolHasTx :: txid -> Bool
}
mapMempoolSnapshot ::
(tx -> tx')
-> MempoolSnapshot txid tx idx
-> MempoolSnapshot txid tx' idx
mapMempoolSnapshot :: forall tx tx' txid idx.
(tx -> tx')
-> MempoolSnapshot txid tx idx -> MempoolSnapshot txid tx' idx
mapMempoolSnapshot tx -> tx'
f MempoolSnapshot txid tx idx
snap =
MempoolSnapshot txid tx idx
snap {
mempoolLookupTx = fmap f . mempoolLookupTx snap
}