{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}

module Test.Cardano.Ledger.Plutus.ScriptTestContext (
  PlutusArgs (..),
  ScriptTestContext (..),
) where

import Cardano.Ledger.Plutus.Language (Plutus, PlutusLanguage)
import Control.DeepSeq (NFData (..))
import GHC.Generics (Generic)
import PlutusLedgerApi.Common (Data)

data PlutusArgs = PlutusArgs
  { PlutusArgs -> Data
paData :: Data
  , PlutusArgs -> Maybe Data
paSpendDatum :: Maybe Data
  }
  deriving ((forall x. PlutusArgs -> Rep PlutusArgs x)
-> (forall x. Rep PlutusArgs x -> PlutusArgs) -> Generic PlutusArgs
forall x. Rep PlutusArgs x -> PlutusArgs
forall x. PlutusArgs -> Rep PlutusArgs x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PlutusArgs -> Rep PlutusArgs x
from :: forall x. PlutusArgs -> Rep PlutusArgs x
$cto :: forall x. Rep PlutusArgs x -> PlutusArgs
to :: forall x. Rep PlutusArgs x -> PlutusArgs
Generic, Int -> PlutusArgs -> ShowS
[PlutusArgs] -> ShowS
PlutusArgs -> String
(Int -> PlutusArgs -> ShowS)
-> (PlutusArgs -> String)
-> ([PlutusArgs] -> ShowS)
-> Show PlutusArgs
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PlutusArgs -> ShowS
showsPrec :: Int -> PlutusArgs -> ShowS
$cshow :: PlutusArgs -> String
show :: PlutusArgs -> String
$cshowList :: [PlutusArgs] -> ShowS
showList :: [PlutusArgs] -> ShowS
Show)

instance NFData PlutusArgs

data ScriptTestContext
  = forall l.
  PlutusLanguage l =>
  ScriptTestContext
  { ()
stcScript :: Plutus l
  , ScriptTestContext -> PlutusArgs
stcArgs :: PlutusArgs
  }

deriving instance Show ScriptTestContext

instance NFData ScriptTestContext where
  rnf :: ScriptTestContext -> ()
rnf (ScriptTestContext Plutus l
script PlutusArgs
args) = Plutus l -> ()
forall a. NFData a => a -> ()
rnf Plutus l
script () -> () -> ()
forall a b. a -> b -> b
`seq` PlutusArgs -> ()
forall a. NFData a => a -> ()
rnf PlutusArgs
args