{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Alonzo.Transition (
  TransitionConfig (..),
  toAlonzoTransitionConfigPairs,
) where

import Cardano.Ledger.Alonzo.Era
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis)
import Cardano.Ledger.Alonzo.Translation ()
import Cardano.Ledger.BaseTypes (toKeyValuePairs)
import Cardano.Ledger.Mary
import Cardano.Ledger.Mary.Transition (TransitionConfig (MaryTransitionConfig))
import Cardano.Ledger.Shelley.Transition
import Data.Aeson (KeyValue (..))
import GHC.Generics
import Lens.Micro
import NoThunks.Class (NoThunks (..))

instance EraTransition AlonzoEra where
  data TransitionConfig AlonzoEra = AlonzoTransitionConfig
    { TransitionConfig AlonzoEra -> AlonzoGenesis
atcAlonzoGenesis :: !AlonzoGenesis
    , TransitionConfig AlonzoEra -> TransitionConfig MaryEra
atcMaryTransitionConfig :: !(TransitionConfig MaryEra)
    }
    deriving (Int -> TransitionConfig AlonzoEra -> ShowS
[TransitionConfig AlonzoEra] -> ShowS
TransitionConfig AlonzoEra -> String
(Int -> TransitionConfig AlonzoEra -> ShowS)
-> (TransitionConfig AlonzoEra -> String)
-> ([TransitionConfig AlonzoEra] -> ShowS)
-> Show (TransitionConfig AlonzoEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransitionConfig AlonzoEra -> ShowS
showsPrec :: Int -> TransitionConfig AlonzoEra -> ShowS
$cshow :: TransitionConfig AlonzoEra -> String
show :: TransitionConfig AlonzoEra -> String
$cshowList :: [TransitionConfig AlonzoEra] -> ShowS
showList :: [TransitionConfig AlonzoEra] -> ShowS
Show, TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool
(TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool)
-> (TransitionConfig AlonzoEra
    -> TransitionConfig AlonzoEra -> Bool)
-> Eq (TransitionConfig AlonzoEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool
== :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool
$c/= :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool
/= :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool
Eq, (forall x.
 TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x)
-> (forall x.
    Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra)
-> Generic (TransitionConfig AlonzoEra)
forall x.
Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra
forall x.
TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x
from :: forall x.
TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x
$cto :: forall x.
Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra
to :: forall x.
Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra
Generic)

  mkTransitionConfig :: TranslationContext AlonzoEra
-> TransitionConfig (PreviousEra AlonzoEra)
-> TransitionConfig AlonzoEra
mkTransitionConfig = TranslationContext AlonzoEra
-> TransitionConfig (PreviousEra AlonzoEra)
-> TransitionConfig AlonzoEra
AlonzoGenesis
-> TransitionConfig MaryEra -> TransitionConfig AlonzoEra
AlonzoTransitionConfig

  injectIntoTestState :: TransitionConfig AlonzoEra
-> NewEpochState AlonzoEra -> NewEpochState AlonzoEra
injectIntoTestState = TransitionConfig AlonzoEra
-> NewEpochState AlonzoEra -> NewEpochState AlonzoEra
forall era.
EraTransition era =>
TransitionConfig era -> NewEpochState era -> NewEpochState era
registerInitialFundsThenStaking

  tcPreviousEraConfigL :: EraTransition (PreviousEra AlonzoEra) =>
Lens'
  (TransitionConfig AlonzoEra)
  (TransitionConfig (PreviousEra AlonzoEra))
tcPreviousEraConfigL =
    (TransitionConfig AlonzoEra -> TransitionConfig MaryEra)
-> (TransitionConfig AlonzoEra
    -> TransitionConfig MaryEra -> TransitionConfig AlonzoEra)
-> Lens
     (TransitionConfig AlonzoEra)
     (TransitionConfig AlonzoEra)
     (TransitionConfig MaryEra)
     (TransitionConfig MaryEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TransitionConfig AlonzoEra -> TransitionConfig MaryEra
atcMaryTransitionConfig (\TransitionConfig AlonzoEra
atc TransitionConfig MaryEra
pc -> TransitionConfig AlonzoEra
atc {atcMaryTransitionConfig = pc})

  tcTranslationContextL :: Lens' (TransitionConfig AlonzoEra) (TranslationContext AlonzoEra)
tcTranslationContextL =
    (TransitionConfig AlonzoEra -> AlonzoGenesis)
-> (TransitionConfig AlonzoEra
    -> AlonzoGenesis -> TransitionConfig AlonzoEra)
-> Lens
     (TransitionConfig AlonzoEra)
     (TransitionConfig AlonzoEra)
     AlonzoGenesis
     AlonzoGenesis
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TransitionConfig AlonzoEra -> AlonzoGenesis
atcAlonzoGenesis (\TransitionConfig AlonzoEra
atc AlonzoGenesis
ag -> TransitionConfig AlonzoEra
atc {atcAlonzoGenesis = ag})

instance NoThunks (TransitionConfig AlonzoEra)

toAlonzoTransitionConfigPairs :: KeyValue e a => TransitionConfig AlonzoEra -> [a]
toAlonzoTransitionConfigPairs :: forall e a. KeyValue e a => TransitionConfig AlonzoEra -> [a]
toAlonzoTransitionConfigPairs = TransitionConfig AlonzoEra -> [a]
forall a e kv. (ToKeyValuePairs a, KeyValue e kv) => a -> [kv]
forall e a. KeyValue e a => TransitionConfig AlonzoEra -> [a]
toKeyValuePairs
{-# DEPRECATED toAlonzoTransitionConfigPairs "In favor of `toKeyValuePairs`" #-}