Skip to content

Commit 972023f

Browse files
committed
refactor(api): extract Babbage/Conway/Dijkstra parsing into unified helper
Creates parseBabbageOnwardsTxOut helper function to eliminate the final source of duplication in the FromJSON instance. The three era cases (Babbage, Conway, Dijkstra) now each call this single helper function. This completes the refactoring by: - Reducing the FromJSON instance by ~10 more lines - Making the code structure clearer with simple era-based dispatch - Consolidating all Babbage+ era parsing logic in one place - Maintaining full backwards compatibility with all tests passing The main case expression now clearly shows the parsing strategy for each era, with complex logic extracted into well-named helper functions.
1 parent 9600b85 commit 972023f

File tree

1 file changed

+15
-15
lines changed
  • cardano-api/src/Cardano/Api/Tx/Internal

1 file changed

+15
-15
lines changed

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -455,22 +455,22 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
455455
<*> return TxOutDatumNone
456456
<*> return ReferenceScriptNone
457457
ShelleyBasedEraAlonzo -> alonzoTxOutParser AlonzoEraOnwardsAlonzo o
458-
ShelleyBasedEraBabbage -> do
459-
alonzoTxOutInBabbage <- alonzoTxOutParser AlonzoEraOnwardsBabbage o
460-
mInlineDatum <- parseInlineDatum BabbageEraOnwardsBabbage o
461-
mReferenceScript <- o .:? "referenceScript"
462-
reconcileDatums BabbageEraOnwardsBabbage alonzoTxOutInBabbage mInlineDatum mReferenceScript
463-
ShelleyBasedEraConway -> do
464-
alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsConway o
465-
mInlineDatum <- parseInlineDatum BabbageEraOnwardsConway o
466-
mReferenceScript <- o .:? "referenceScript"
467-
reconcileDatums BabbageEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
468-
ShelleyBasedEraDijkstra -> do
469-
alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o
470-
mInlineDatum <- parseInlineDatum BabbageEraOnwardsDijkstra o
471-
mReferenceScript <- o .:? "referenceScript"
472-
reconcileDatums BabbageEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
458+
ShelleyBasedEraBabbage -> parseBabbageOnwardsTxOut BabbageEraOnwardsBabbage o
459+
ShelleyBasedEraConway -> parseBabbageOnwardsTxOut BabbageEraOnwardsConway o
460+
ShelleyBasedEraDijkstra -> parseBabbageOnwardsTxOut BabbageEraOnwardsDijkstra o
473461
where
462+
-- | Parse TxOut for Babbage+ eras
463+
-- Handles both Alonzo-style (datumhash/datum) and Babbage-style (inlineDatumhash/inlineDatum) fields
464+
parseBabbageOnwardsTxOut
465+
:: BabbageEraOnwards era
466+
-> Aeson.Object
467+
-> Aeson.Parser (TxOut CtxTx era)
468+
parseBabbageOnwardsTxOut w o = do
469+
alonzoTxOut <- alonzoTxOutParser (convert w) o
470+
inlineDatum <- parseInlineDatum w o
471+
mReferenceScript <- o .:? "referenceScript"
472+
reconcileDatums w alonzoTxOut inlineDatum mReferenceScript
473+
474474
-- | Parse inline datum fields from JSON object
475475
-- Handles both inlineDatumhash and inlineDatum fields, validating they match
476476
parseInlineDatum

0 commit comments

Comments
 (0)