{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Mary.Transition (TransitionConfig (..)) where

import Cardano.Ledger.Allegra
import Cardano.Ledger.Allegra.Transition
import Cardano.Ledger.Genesis (NoGenesis (..))
import Cardano.Ledger.Mary.Era
import Cardano.Ledger.Mary.State ()
import Cardano.Ledger.Mary.Translation ()
import Cardano.Ledger.Shelley.Transition
import Data.Aeson (FromJSON (..), ToJSON (..))
import Lens.Micro
import NoThunks.Class (NoThunks (..))

instance EraTransition MaryEra where
  newtype TransitionConfig MaryEra = MaryTransitionConfig
    { TransitionConfig MaryEra -> TransitionConfig AllegraEra
mtcAllegraTransitionConfig :: TransitionConfig AllegraEra
    }
    deriving (Int -> TransitionConfig MaryEra -> ShowS
[TransitionConfig MaryEra] -> ShowS
TransitionConfig MaryEra -> String
(Int -> TransitionConfig MaryEra -> ShowS)
-> (TransitionConfig MaryEra -> String)
-> ([TransitionConfig MaryEra] -> ShowS)
-> Show (TransitionConfig MaryEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransitionConfig MaryEra -> ShowS
showsPrec :: Int -> TransitionConfig MaryEra -> ShowS
$cshow :: TransitionConfig MaryEra -> String
show :: TransitionConfig MaryEra -> String
$cshowList :: [TransitionConfig MaryEra] -> ShowS
showList :: [TransitionConfig MaryEra] -> ShowS
Show, TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
(TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool)
-> (TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool)
-> Eq (TransitionConfig MaryEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
== :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
$c/= :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
/= :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
Eq, Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
Proxy (TransitionConfig MaryEra) -> String
(Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo))
-> (Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo))
-> (Proxy (TransitionConfig MaryEra) -> String)
-> NoThunks (TransitionConfig MaryEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (TransitionConfig MaryEra) -> String
showTypeOf :: Proxy (TransitionConfig MaryEra) -> String
NoThunks, [TransitionConfig MaryEra] -> Value
[TransitionConfig MaryEra] -> Encoding
TransitionConfig MaryEra -> Bool
TransitionConfig MaryEra -> Value
TransitionConfig MaryEra -> Encoding
(TransitionConfig MaryEra -> Value)
-> (TransitionConfig MaryEra -> Encoding)
-> ([TransitionConfig MaryEra] -> Value)
-> ([TransitionConfig MaryEra] -> Encoding)
-> (TransitionConfig MaryEra -> Bool)
-> ToJSON (TransitionConfig MaryEra)
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: TransitionConfig MaryEra -> Value
toJSON :: TransitionConfig MaryEra -> Value
$ctoEncoding :: TransitionConfig MaryEra -> Encoding
toEncoding :: TransitionConfig MaryEra -> Encoding
$ctoJSONList :: [TransitionConfig MaryEra] -> Value
toJSONList :: [TransitionConfig MaryEra] -> Value
$ctoEncodingList :: [TransitionConfig MaryEra] -> Encoding
toEncodingList :: [TransitionConfig MaryEra] -> Encoding
$comitField :: TransitionConfig MaryEra -> Bool
omitField :: TransitionConfig MaryEra -> Bool
ToJSON, Maybe (TransitionConfig MaryEra)
Value -> Parser [TransitionConfig MaryEra]
Value -> Parser (TransitionConfig MaryEra)
(Value -> Parser (TransitionConfig MaryEra))
-> (Value -> Parser [TransitionConfig MaryEra])
-> Maybe (TransitionConfig MaryEra)
-> FromJSON (TransitionConfig MaryEra)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser (TransitionConfig MaryEra)
parseJSON :: Value -> Parser (TransitionConfig MaryEra)
$cparseJSONList :: Value -> Parser [TransitionConfig MaryEra]
parseJSONList :: Value -> Parser [TransitionConfig MaryEra]
$comittedField :: Maybe (TransitionConfig MaryEra)
omittedField :: Maybe (TransitionConfig MaryEra)
FromJSON)

  mkTransitionConfig :: TranslationContext MaryEra
-> TransitionConfig (PreviousEra MaryEra)
-> TransitionConfig MaryEra
mkTransitionConfig TranslationContext MaryEra
NoGenesis MaryEra
NoGenesis = TransitionConfig AllegraEra -> TransitionConfig MaryEra
TransitionConfig (PreviousEra MaryEra) -> TransitionConfig MaryEra
MaryTransitionConfig

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

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

  tcTranslationContextL :: Lens' (TransitionConfig MaryEra) (TranslationContext MaryEra)
tcTranslationContextL = (TransitionConfig MaryEra -> NoGenesis MaryEra)
-> (TransitionConfig MaryEra
    -> NoGenesis MaryEra -> TransitionConfig MaryEra)
-> Lens
     (TransitionConfig MaryEra)
     (TransitionConfig MaryEra)
     (NoGenesis MaryEra)
     (NoGenesis MaryEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (NoGenesis MaryEra -> TransitionConfig MaryEra -> NoGenesis MaryEra
forall a b. a -> b -> a
const NoGenesis MaryEra
forall era. NoGenesis era
NoGenesis) (TransitionConfig MaryEra
-> NoGenesis MaryEra -> TransitionConfig MaryEra
forall a b. a -> b -> a
const (TransitionConfig MaryEra
 -> NoGenesis MaryEra -> TransitionConfig MaryEra)
-> (TransitionConfig MaryEra -> TransitionConfig MaryEra)
-> TransitionConfig MaryEra
-> NoGenesis MaryEra
-> TransitionConfig MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TransitionConfig MaryEra -> TransitionConfig MaryEra
forall a. a -> a
id)