module Test.Cardano.Chain.MempoolPayload.Gen (
  genMempoolPayload,
) where

import Cardano.Chain.MempoolPayload (AMempoolPayload (..), MempoolPayload)
import Cardano.Crypto (ProtocolMagicId)
import Cardano.Prelude
import Hedgehog
import qualified Hedgehog.Gen as Gen
import Test.Cardano.Chain.Delegation.Gen as Delegation (genCertificate)
import Test.Cardano.Chain.UTxO.Gen (genTxAux)
import Test.Cardano.Chain.Update.Gen as Update (genProposal, genVote)

genMempoolPayload :: ProtocolMagicId -> Gen MempoolPayload
genMempoolPayload :: ProtocolMagicId -> Gen MempoolPayload
genMempoolPayload ProtocolMagicId
pmi =
  [Gen MempoolPayload] -> Gen MempoolPayload
forall (m :: * -> *) a. MonadGen m => [m a] -> m a
Gen.choice
    [ ATxAux () -> MempoolPayload
forall a. ATxAux a -> AMempoolPayload a
MempoolTx (ATxAux () -> MempoolPayload)
-> GenT Identity (ATxAux ()) -> Gen MempoolPayload
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolMagicId -> GenT Identity (ATxAux ())
genTxAux ProtocolMagicId
pmi
    , ACertificate () -> MempoolPayload
forall a. ACertificate a -> AMempoolPayload a
MempoolDlg (ACertificate () -> MempoolPayload)
-> GenT Identity (ACertificate ()) -> Gen MempoolPayload
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolMagicId -> GenT Identity (ACertificate ())
Delegation.genCertificate ProtocolMagicId
pmi
    , AProposal () -> MempoolPayload
forall a. AProposal a -> AMempoolPayload a
MempoolUpdateProposal (AProposal () -> MempoolPayload)
-> GenT Identity (AProposal ()) -> Gen MempoolPayload
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolMagicId -> GenT Identity (AProposal ())
Update.genProposal ProtocolMagicId
pmi
    , AVote () -> MempoolPayload
forall a. AVote a -> AMempoolPayload a
MempoolUpdateVote (AVote () -> MempoolPayload)
-> GenT Identity (AVote ()) -> Gen MempoolPayload
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProtocolMagicId -> GenT Identity (AVote ())
Update.genVote ProtocolMagicId
pmi
    ]