{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}

module Ouroboros.Consensus.Storage.LedgerDB.TraceEvent
  ( FlavorImplSpecificTrace (..)
  , TraceEvent (..)
  ) where

import GHC.Generics
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.Ledger.Inspect
import Ouroboros.Consensus.Storage.LedgerDB.API
import Ouroboros.Consensus.Storage.LedgerDB.Forker
import Ouroboros.Consensus.Storage.LedgerDB.Snapshots
import qualified Ouroboros.Consensus.Storage.LedgerDB.V1.BackingStore as V1
import qualified Ouroboros.Consensus.Storage.LedgerDB.V2.Backend as V2

{-------------------------------------------------------------------------------
  Tracing
-------------------------------------------------------------------------------}

data FlavorImplSpecificTrace
  = FlavorImplSpecificTraceV1 V1.SomeBackendTrace
  | FlavorImplSpecificTraceV2 V2.LedgerDBV2Trace
  deriving Int -> FlavorImplSpecificTrace -> ShowS
[FlavorImplSpecificTrace] -> ShowS
FlavorImplSpecificTrace -> String
(Int -> FlavorImplSpecificTrace -> ShowS)
-> (FlavorImplSpecificTrace -> String)
-> ([FlavorImplSpecificTrace] -> ShowS)
-> Show FlavorImplSpecificTrace
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FlavorImplSpecificTrace -> ShowS
showsPrec :: Int -> FlavorImplSpecificTrace -> ShowS
$cshow :: FlavorImplSpecificTrace -> String
show :: FlavorImplSpecificTrace -> String
$cshowList :: [FlavorImplSpecificTrace] -> ShowS
showList :: [FlavorImplSpecificTrace] -> ShowS
Show

data TraceEvent blk
  = LedgerDBSnapshotEvent !(TraceSnapshotEvent blk)
  | LedgerReplayEvent !(TraceReplayEvent blk)
  | LedgerDBForkerEvent !TraceForkerEventWithKey
  | LedgerDBFlavorImplEvent !FlavorImplSpecificTrace
  deriving (forall x. TraceEvent blk -> Rep (TraceEvent blk) x)
-> (forall x. Rep (TraceEvent blk) x -> TraceEvent blk)
-> Generic (TraceEvent blk)
forall x. Rep (TraceEvent blk) x -> TraceEvent blk
forall x. TraceEvent blk -> Rep (TraceEvent blk) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall blk x. Rep (TraceEvent blk) x -> TraceEvent blk
forall blk x. TraceEvent blk -> Rep (TraceEvent blk) x
$cfrom :: forall blk x. TraceEvent blk -> Rep (TraceEvent blk) x
from :: forall x. TraceEvent blk -> Rep (TraceEvent blk) x
$cto :: forall blk x. Rep (TraceEvent blk) x -> TraceEvent blk
to :: forall x. Rep (TraceEvent blk) x -> TraceEvent blk
Generic

deriving instance
  ( StandardHash blk
  , InspectLedger blk
  ) =>
  Show (TraceEvent blk)