{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}

module Test.Gen.Cardano.Api.Era
  ( shelleyBasedEraTestConstraints
  , shelleyToBabbageEraTestConstraints
  , conwayEraOnwardsTestConstraints
  )
where

import Cardano.Api hiding (txIns)
import Cardano.Api.Shelley

import Cardano.Ledger.BaseTypes qualified as Ledger
import Cardano.Ledger.Core qualified as Ledger

import Data.Functor.Identity qualified as Ledger

import Test.Cardano.Ledger.Conway.Arbitrary ()
import Test.Cardano.Ledger.Core.Arbitrary ()

import Test.QuickCheck (Arbitrary (..))

shelleyBasedEraTestConstraints
  :: ()
  => ShelleyBasedEra era
  -> ( ( Ledger.Era (ShelleyLedgerEra era)
       , Arbitrary (Ledger.PParamsHKD Ledger.StrictMaybe (ShelleyLedgerEra era))
       , Arbitrary (Ledger.PParamsHKD Ledger.Identity (ShelleyLedgerEra era))
       )
       => a
     )
  -> a
shelleyBasedEraTestConstraints :: forall era a.
ShelleyBasedEra era
-> ((Era (ShelleyLedgerEra era),
     Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
     Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
    a)
-> a
shelleyBasedEraTestConstraints = \case
  ShelleyBasedEra era
ShelleyBasedEraShelley -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyBasedEra era
ShelleyBasedEraAllegra -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyBasedEra era
ShelleyBasedEraMary -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyBasedEra era
ShelleyBasedEraAlonzo -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyBasedEra era
ShelleyBasedEraBabbage -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyBasedEra era
ShelleyBasedEraConway -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id

shelleyToBabbageEraTestConstraints
  :: ()
  => ShelleyToBabbageEra era
  -> ( ( Ledger.Era (ShelleyLedgerEra era)
       , Arbitrary (Ledger.PParamsHKD Ledger.StrictMaybe (ShelleyLedgerEra era))
       , Arbitrary (Ledger.PParamsHKD Ledger.Identity (ShelleyLedgerEra era))
       )
       => a
     )
  -> a
shelleyToBabbageEraTestConstraints :: forall era a.
ShelleyToBabbageEra era
-> ((Era (ShelleyLedgerEra era),
     Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
     Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
    a)
-> a
shelleyToBabbageEraTestConstraints = \case
  ShelleyToBabbageEra era
ShelleyToBabbageEraShelley -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyToBabbageEra era
ShelleyToBabbageEraAllegra -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyToBabbageEra era
ShelleyToBabbageEraMary -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyToBabbageEra era
ShelleyToBabbageEraAlonzo -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id
  ShelleyToBabbageEra era
ShelleyToBabbageEraBabbage -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id

conwayEraOnwardsTestConstraints
  :: ()
  => ConwayEraOnwards era
  -> ( ( Ledger.Era (ShelleyLedgerEra era)
       , Arbitrary (Ledger.PParamsHKD Ledger.StrictMaybe (ShelleyLedgerEra era))
       , Arbitrary (Ledger.PParamsHKD Ledger.Identity (ShelleyLedgerEra era))
       )
       => a
     )
  -> a
conwayEraOnwardsTestConstraints :: forall era a.
ConwayEraOnwards era
-> ((Era (ShelleyLedgerEra era),
     Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
     Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
    a)
-> a
conwayEraOnwardsTestConstraints = \case
  ConwayEraOnwards era
ConwayEraOnwardsConway -> a -> a
((Era (ShelleyLedgerEra era),
  Arbitrary (PParamsHKD StrictMaybe (ShelleyLedgerEra era)),
  Arbitrary (PParamsHKD Identity (ShelleyLedgerEra era))) =>
 a)
-> a
forall a. a -> a
id