module Hydra.Cardano.Api.CtxUTxO where

import Hydra.Cardano.Api.Prelude

-- | A convenient type-class for transforming types in 'CtxTx' to 'CtxUTxO'.
--
-- See also 'ToTxContext' for the reverse.
class ToUTxOContext f where
  toUTxOContext :: f CtxTx era -> f CtxUTxO era

instance ToUTxOContext TxOutDatum where
  toUTxOContext :: forall era. TxOutDatum CtxTx era -> TxOutDatum CtxUTxO era
toUTxOContext = \case
    TxOutDatum CtxTx era
TxOutDatumNone -> TxOutDatum CtxUTxO era
forall ctx era. TxOutDatum ctx era
TxOutDatumNone
    TxOutDatumHash AlonzoEraOnwards era
s Hash ScriptData
h -> AlonzoEraOnwards era -> Hash ScriptData -> TxOutDatum CtxUTxO era
forall era ctx.
AlonzoEraOnwards era -> Hash ScriptData -> TxOutDatum ctx era
TxOutDatumHash AlonzoEraOnwards era
s Hash ScriptData
h
    TxOutDatumInTx AlonzoEraOnwards era
s HashableScriptData
d -> AlonzoEraOnwards era -> Hash ScriptData -> TxOutDatum CtxUTxO era
forall era ctx.
AlonzoEraOnwards era -> Hash ScriptData -> TxOutDatum ctx era
TxOutDatumHash AlonzoEraOnwards era
s (HashableScriptData -> Hash ScriptData
hashScriptDataBytes HashableScriptData
d)
    TxOutDatumInline BabbageEraOnwards era
s HashableScriptData
sd -> BabbageEraOnwards era
-> HashableScriptData -> TxOutDatum CtxUTxO era
forall era ctx.
BabbageEraOnwards era -> HashableScriptData -> TxOutDatum ctx era
TxOutDatumInline BabbageEraOnwards era
s HashableScriptData
sd

instance ToUTxOContext TxOut where
  toUTxOContext :: forall era. TxOut CtxTx era -> TxOut CtxUTxO era
toUTxOContext (TxOut AddressInEra era
addr TxOutValue era
value TxOutDatum CtxTx era
dat ReferenceScript era
ref) =
    AddressInEra era
-> TxOutValue era
-> TxOutDatum CtxUTxO era
-> ReferenceScript era
-> TxOut CtxUTxO era
forall ctx era.
AddressInEra era
-> TxOutValue era
-> TxOutDatum ctx era
-> ReferenceScript era
-> TxOut ctx era
TxOut AddressInEra era
addr TxOutValue era
value (TxOutDatum CtxTx era -> TxOutDatum CtxUTxO era
forall era. TxOutDatum CtxTx era -> TxOutDatum CtxUTxO era
forall {k} (f :: * -> k -> *) (era :: k).
ToUTxOContext f =>
f CtxTx era -> f CtxUTxO era
toUTxOContext TxOutDatum CtxTx era
dat) ReferenceScript era
ref