Skip to content

Commit 21408c8

Browse files
committed
refactor(api): migrate ToJSON instances to use experimental Era type
Replaces IsCardanoEra constraint with Exp.IsEra in ToJSON instances for TxOut and UTxO types, adopting the new experimental Era framework for JSON serialization. This change simplifies the era handling by using Exp.useEra instead of cardanoEra and reduces the pattern matching cases in txOutToJsonValue to only handle ConwayEra and DijkstraEra. - Update TxOut ToJSON instance to use Exp.IsEra constraint - Update UTxO ToJSON instance to use Exp.IsEra constraint - Refactor txOutToJsonValue to use Exp.Era type parameter - Remove redundant pattern matches for Byron through Babbage eras - Update test generators to use ShelleyBasedEraConway instead of Babbage The test suite changes ensure compatibility with the new era handling approach by testing against the Conway era, which provides better coverage of the current serialization logic.
1 parent 054d33c commit 21408c8

File tree

3 files changed

+16
-33
lines changed

3 files changed

+16
-33
lines changed

cardano-api/src/Cardano/Api/Tx/Internal/Output.hs

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import Cardano.Api.Era.Internal.Eon.Convert
6565
import Cardano.Api.Era.Internal.Eon.ConwayEraOnwards
6666
import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
6767
import Cardano.Api.Error (Error (..), displayError)
68+
import Cardano.Api.Experimental.Era qualified as Exp
6869
import Cardano.Api.HasTypeProxy qualified as HTP
6970
import Cardano.Api.Ledger.Internal.Reexport qualified as Ledger
7071
import Cardano.Api.Monad.Error
@@ -338,34 +339,13 @@ fromBabbageTxOut w txdatums txout =
338339
(fromAlonzoData d)
339340
| otherwise = TxOutDatumHash (convert w) (ScriptDataHash dh)
340341

341-
instance IsCardanoEra era => ToJSON (TxOut ctx era) where
342-
toJSON = txOutToJsonValue cardanoEra
342+
instance Exp.IsEra era => ToJSON (TxOut ctx era) where
343+
toJSON = txOutToJsonValue Exp.useEra
343344

344-
txOutToJsonValue :: CardanoEra era -> TxOut ctx era -> Aeson.Value
345+
txOutToJsonValue :: Exp.Era era -> TxOut ctx era -> Aeson.Value
345346
txOutToJsonValue era (TxOut addr val dat refScript) =
346347
case era of
347-
ByronEra -> object ["address" .= addr, "value" .= val]
348-
ShelleyEra -> object ["address" .= addr, "value" .= val]
349-
AllegraEra -> object ["address" .= addr, "value" .= val]
350-
MaryEra -> object ["address" .= addr, "value" .= val]
351-
AlonzoEra ->
352-
object
353-
[ "address" .= addr
354-
, "value" .= val
355-
, datHashJsonVal dat
356-
, "datum" .= datJsonVal dat
357-
]
358-
BabbageEra ->
359-
object
360-
[ "address" .= addr
361-
, "value" .= val
362-
, datHashJsonVal dat
363-
, "datum" .= datJsonVal dat
364-
, "inlineDatum" .= inlineDatumJsonVal dat
365-
, "inlineDatumRaw" .= inlineDatumRawJsonCbor dat
366-
, "referenceScript" .= refScriptJsonVal refScript
367-
]
368-
ConwayEra ->
348+
Exp.ConwayEra ->
369349
object
370350
[ "address" .= addr
371351
, "value" .= val
@@ -375,7 +355,7 @@ txOutToJsonValue era (TxOut addr val dat refScript) =
375355
, "inlineDatumRaw" .= inlineDatumRawJsonCbor dat
376356
, "referenceScript" .= refScriptJsonVal refScript
377357
]
378-
DijkstraEra ->
358+
Exp.DijkstraEra ->
379359
object
380360
[ "address" .= addr
381361
, "value" .= val

cardano-api/src/Cardano/Api/UTxO.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ module Cardano.Api.UTxO
8181
)
8282
where
8383

84-
import Cardano.Api.Era.Internal.Core (IsCardanoEra)
8584
import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
8685
( IsShelleyBasedEra
8786
, ShelleyBasedEra
8887
, ShelleyLedgerEra
8988
)
89+
import Cardano.Api.Experimental.Era qualified as Exp
9090
import Cardano.Api.Tx.Internal.Output
9191
( CtxUTxO
9292
, TxOut (..)
@@ -133,7 +133,7 @@ instance GHC.IsList (UTxO era) where
133133
fromList = UTxO . GHC.fromList
134134
toList = GHC.toList . unUTxO
135135

136-
instance IsCardanoEra era => ToJSON (UTxO era) where
136+
instance Exp.IsEra era => ToJSON (UTxO era) where
137137
toJSON (UTxO m) = toJSON m
138138
toEncoding (UTxO m) = toEncoding m
139139

cardano-api/test/cardano-api-test/Test/Cardano/Api/Json.hs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,37 @@ import Hedgehog.Gen qualified as Gen
2121
import Test.Tasty (TestTree, testGroup)
2222
import Test.Tasty.Hedgehog (testProperty)
2323

24+
testEra :: ShelleyBasedEra ConwayEra
25+
testEra = ShelleyBasedEraConway
26+
2427
prop_json_roundtrip_alonzo_genesis :: Property
2528
prop_json_roundtrip_alonzo_genesis = H.property $ do
2629
genesis <- forAll genAlonzoGenesis
2730
tripping genesis encode eitherDecode
2831

2932
prop_json_roundtrip_utxo :: Property
3033
prop_json_roundtrip_utxo = H.property $ do
31-
utxo <- forAll $ genUTxO ShelleyBasedEraBabbage
34+
utxo <- forAll $ genUTxO testEra
3235
tripping utxo encode eitherDecode
3336

3437
prop_json_roundtrip_reference_scripts :: Property
3538
prop_json_roundtrip_reference_scripts = H.property $ do
36-
rScript <- forAll $ genReferenceScript ShelleyBasedEraBabbage
39+
rScript <- forAll $ genReferenceScript testEra
3740
tripping rScript encode eitherDecode
3841

3942
prop_json_roundtrip_txoutvalue :: Property
4043
prop_json_roundtrip_txoutvalue = H.property $ do
41-
oVal <- forAll $ genTxOutValue ShelleyBasedEraBabbage
44+
oVal <- forAll $ genTxOutValue testEra
4245
tripping oVal encode eitherDecode
4346

4447
prop_json_roundtrip_txout_tx_context :: Property
4548
prop_json_roundtrip_txout_tx_context = H.property $ do
46-
txOut <- forAll $ genTxOutTxContext ShelleyBasedEraBabbage
49+
txOut <- forAll $ genTxOutTxContext testEra
4750
tripping txOut encode eitherDecode
4851

4952
prop_json_roundtrip_txout_utxo_context :: Property
5053
prop_json_roundtrip_txout_utxo_context = H.property $ do
51-
txOut <- forAll $ genTxOutUTxOContext ShelleyBasedEraBabbage
54+
txOut <- forAll $ genTxOutUTxOContext testEra
5255
tripping txOut encode eitherDecode
5356

5457
prop_json_roundtrip_scriptdata_detailed_json :: Property

0 commit comments

Comments
 (0)