11{-# LANGUAGE DataKinds #-}
22{-# LANGUAGE FlexibleContexts #-}
3+ {-# LANGUAGE FlexibleInstances #-}
34{-# LANGUAGE GADTs #-}
45{-# LANGUAGE RankNTypes #-}
56{-# LANGUAGE ScopedTypeVariables #-}
67{-# LANGUAGE StandaloneDeriving #-}
78{-# LANGUAGE TypeApplications #-}
89{-# LANGUAGE TypeFamilies #-}
9- {-# LANGUAGE UndecidableInstances #-}
1010
1111module Cardano.Api.Experimental.Plutus.Internal.Script
1212 ( PlutusScriptInEra (.. )
1313 , PlutusScriptOrReferenceInput (.. )
14+ , AsType (.. )
15+ , deserialisePlutusScriptInEra
1416 , plutusScriptInEraLanguage
1517 , plutusScriptInEraSLanguage
1618 , plutusScriptInEraToScript
@@ -30,6 +32,7 @@ import Cardano.Ledger.Plutus.Language (PlutusRunnable)
3032import Cardano.Ledger.Plutus.Language qualified as L
3133import Cardano.Ledger.Plutus.Language qualified as Plutus
3234
35+ import Data.ByteString qualified as BS
3336import Data.ByteString.Lazy qualified as LBS
3437import Data.ByteString.Short qualified as SBS
3538import Data.Text qualified as Text
@@ -59,12 +62,15 @@ deriving instance Show (PlutusScriptInEra lang era)
5962
6063deriving instance Eq (PlutusScriptInEra lang era )
6164
62- instance (Typeable era , Typeable lang ) => HasTypeProxy (PlutusScriptInEra lang era ) where
63- data AsType (PlutusScriptInEra lang era ) = AsPlutusScriptInEra
64- proxyToAsType _ = AsPlutusScriptInEra
65+ instance
66+ (Typeable era , Typeable lang , HasTypeProxy (Plutus. SLanguage lang ))
67+ => HasTypeProxy (PlutusScriptInEra lang era )
68+ where
69+ data AsType (PlutusScriptInEra lang era ) = AsPlutusScriptInEra (AsType (L. SLanguage lang ))
70+ proxyToAsType _ = AsPlutusScriptInEra (proxyToAsType (Proxy @ (L. SLanguage lang )))
6571
6672instance
67- (Plutus. PlutusLanguage lang , L. Era era )
73+ (Plutus. PlutusLanguage lang , L. Era era , HasTypeProxy ( Plutus. SLanguage lang ) )
6874 => HasTextEnvelope (PlutusScriptInEra lang era )
6975 where
7076 textEnvelopeType _ =
@@ -79,6 +85,7 @@ instance
7985 , Typeable era
8086 , Typeable lang
8187 , Plutus. PlutusLanguage lang
88+ , HasTypeProxy (Plutus. SLanguage lang )
8289 )
8390 => SerialiseAsCBOR (PlutusScriptInEra (lang :: L. Language ) era )
8491 where
@@ -97,6 +104,13 @@ instance
97104 CBOR. DecoderErrorCustom " PlutusLedgerApi.Common.ScriptDecodeError" (Text. pack . show $ pretty e)
98105 Right s -> Right $ PlutusScriptInEra s
99106
107+ deserialisePlutusScriptInEra
108+ :: forall era lang
109+ . (L. Era era , Plutus. PlutusLanguage lang , HasTypeProxy (Plutus. SLanguage lang ))
110+ => L. SLanguage lang -> BS. ByteString -> Either CBOR. DecoderError (PlutusScriptInEra lang era )
111+ deserialisePlutusScriptInEra _ bs =
112+ deserialiseFromCBOR (AsPlutusScriptInEra (proxyToAsType (Proxy @ (L. SLanguage lang )))) bs
113+
100114plutusScriptInEraSLanguage
101115 :: forall lang era . L. PlutusLanguage lang => PlutusScriptInEra lang era -> L. SLanguage lang
102116plutusScriptInEraSLanguage (PlutusScriptInEra _) =
0 commit comments