{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Convex.TestingInterface.Trace.RedeemerTag (
autoRedeemerTag,
labelRedeemer,
) where
import Data.Text qualified as Text
import PlutusLedgerApi.V1 qualified as PlutusLedgerApi
import PlutusTx.IsData.Class (FromData)
import Convex.TestingInterface.Trace (
RedeemerTag (..),
RedeemerTagger (..),
)
autoRedeemerTag
:: forall r proxy
. (FromData r, Show r)
=> proxy r
-> RedeemerTagger
autoRedeemerTag :: forall r (proxy :: * -> *).
(FromData r, Show r) =>
proxy r -> RedeemerTagger
autoRedeemerTag proxy r
_ =
(Data -> Maybe RedeemerTag) -> RedeemerTagger
RedeemerTagger ((Data -> Maybe RedeemerTag) -> RedeemerTagger)
-> (Data -> Maybe RedeemerTag) -> RedeemerTagger
forall a b. (a -> b) -> a -> b
$ \Data
d ->
case Data -> Maybe r
forall a. FromData a => Data -> Maybe a
PlutusLedgerApi.fromData Data
d :: Maybe r of
Just r
val -> RedeemerTag -> Maybe RedeemerTag
forall a. a -> Maybe a
Just (Text -> Maybe Value -> RedeemerTag
RedeemerTag (String -> Text
Text.pack (r -> String
forall a. Show a => a -> String
show r
val)) Maybe Value
forall a. Maybe a
Nothing)
Maybe r
Nothing -> Maybe RedeemerTag
forall a. Maybe a
Nothing
labelRedeemer
:: forall r proxy
. (FromData r)
=> proxy r
-> (r -> RedeemerTag)
-> RedeemerTagger
labelRedeemer :: forall r (proxy :: * -> *).
FromData r =>
proxy r -> (r -> RedeemerTag) -> RedeemerTagger
labelRedeemer proxy r
_ r -> RedeemerTag
f =
(Data -> Maybe RedeemerTag) -> RedeemerTagger
RedeemerTagger ((Data -> Maybe RedeemerTag) -> RedeemerTagger)
-> (Data -> Maybe RedeemerTag) -> RedeemerTagger
forall a b. (a -> b) -> a -> b
$ \Data
d ->
case Data -> Maybe r
forall a. FromData a => Data -> Maybe a
PlutusLedgerApi.fromData Data
d :: Maybe r of
Just r
val -> RedeemerTag -> Maybe RedeemerTag
forall a. a -> Maybe a
Just (r -> RedeemerTag
f r
val)
Maybe r
Nothing -> Maybe RedeemerTag
forall a. Maybe a
Nothing