{-# LANGUAGE DataKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Rules.Utxo () where

import Cardano.Ledger.Allegra.Rules (shelleyToAllegraUtxoPredFailure)
import qualified Cardano.Ledger.Allegra.Rules as Allegra
import Cardano.Ledger.Alonzo.Rules (AlonzoUtxoEvent, AlonzoUtxoPredFailure, AlonzoUtxosPredFailure)
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo
import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure)
import Cardano.Ledger.Conway.Rules (
  ConwayUtxoPredFailure (..),
  ConwayUtxosPredFailure,
  allegraToConwayUtxoPredFailure,
  alonzoToConwayUtxoPredFailure,
  babbageToConwayUtxoPredFailure,
 )
import Cardano.Ledger.Dijkstra.Core (EraRuleEvent, EraRuleFailure, InjectRuleFailure (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Rules.Utxos ()
import Cardano.Ledger.Shelley.Rules (ShelleyUtxoPredFailure)

type instance EraRuleFailure "UTXO" DijkstraEra = ConwayUtxoPredFailure DijkstraEra

type instance EraRuleEvent "UTXO" DijkstraEra = AlonzoUtxoEvent DijkstraEra

instance InjectRuleFailure "UTXO" ConwayUtxoPredFailure DijkstraEra

instance InjectRuleFailure "UTXO" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
BabbageUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. BabbageUtxoPredFailure era -> ConwayUtxoPredFailure era
babbageToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. AlonzoUtxoPredFailure era -> ConwayUtxoPredFailure era
alonzoToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure =
    AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era.
(EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era) =>
AllegraUtxoPredFailure era -> ConwayUtxoPredFailure era
allegraToConwayUtxoPredFailure
      (AllegraUtxoPredFailure DijkstraEra
 -> ConwayUtxoPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> AllegraUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> AllegraUtxoPredFailure DijkstraEra
forall era.
ShelleyUtxoPredFailure era -> AllegraUtxoPredFailure era
shelleyToAllegraUtxoPredFailure

instance InjectRuleFailure "UTXO" Allegra.AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era.
(EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era) =>
AllegraUtxoPredFailure era -> ConwayUtxoPredFailure era
allegraToConwayUtxoPredFailure

instance InjectRuleFailure "UTXO" ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXOS" DijkstraEra)
-> ConwayUtxoPredFailure DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOS" era) -> ConwayUtxoPredFailure era
UtxosFailure

instance InjectRuleFailure "UTXO" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
injectFailure =
    AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall era. AlonzoUtxoPredFailure era -> ConwayUtxoPredFailure era
alonzoToConwayUtxoPredFailure
      (AlonzoUtxoPredFailure DijkstraEra
 -> ConwayUtxoPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> AlonzoUtxoPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PredicateFailure (EraRule "UTXOS" DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> AlonzoUtxoPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXOS" era) -> AlonzoUtxoPredFailure era
Alonzo.UtxosFailure
      (ConwayUtxosPredFailure DijkstraEra
 -> AlonzoUtxoPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ConwayUtxosPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> AlonzoUtxoPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOS" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxosPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure