Skip to content

Commit 18bc75b

Browse files
committed
Define ToJSON instance in EraPParams based on pparams
1 parent e50fea0 commit 18bc75b

File tree

1 file changed

+25
-7
lines changed
  • libs/cardano-ledger-core/src/Cardano/Ledger/Core

1 file changed

+25
-7
lines changed

libs/cardano-ledger-core/src/Cardano/Ledger/Core/PParams.hs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ import Cardano.Ledger.HKD (HKD, HKDApplicative, HKDFunctor (..), NoUpdate (..))
9898
import Cardano.Ledger.Plutus.ToPlutusData (ToPlutusData (..))
9999
import Control.DeepSeq (NFData)
100100
import Control.Monad.Identity (Identity)
101-
import Data.Aeson (FromJSON, ToJSON)
101+
import Data.Aeson (FromJSON, ToJSON (..), object, pairs, (.=))
102+
import qualified Data.Aeson as Aeson (KeyValue)
103+
import qualified Data.Aeson.Key as Aeson (fromText)
102104
import Data.Default (Default (..))
103105
import qualified Data.Foldable as F (foldMap', foldl', foldlM)
104106
import Data.IntMap (IntMap)
@@ -136,8 +138,9 @@ deriving newtype instance
136138
deriving stock instance
137139
Show (PParamsHKD Identity era) => Show (PParams era)
138140

139-
deriving newtype instance
140-
ToJSON (PParamsHKD Identity era) => ToJSON (PParams era)
141+
instance EraPParams era => ToJSON (PParams era) where
142+
toJSON = object . jsonPairsPParams
143+
toEncoding = pairs . mconcat . jsonPairsPParams
141144

142145
deriving newtype instance
143146
FromJSON (PParamsHKD Identity era) => FromJSON (PParams era)
@@ -228,8 +231,9 @@ instance EraPParams era => ToCBOR (PParamsUpdate era) where
228231
instance EraPParams era => FromCBOR (PParamsUpdate era) where
229232
fromCBOR = fromEraCBOR @era
230233

231-
deriving newtype instance
232-
ToJSON (PParamsHKD StrictMaybe era) => ToJSON (PParamsUpdate era)
234+
instance EraPParams era => ToJSON (PParamsUpdate era) where
235+
toJSON = object . jsonPairsPParamsUpdate
236+
toEncoding = pairs . mconcat . jsonPairsPParamsUpdate
233237

234238
deriving newtype instance
235239
FromJSON (PParamsHKD StrictMaybe era) => FromJSON (PParamsUpdate era)
@@ -283,14 +287,12 @@ class
283287
, Show (PParamsHKD Identity era)
284288
, NFData (PParamsHKD Identity era)
285289
, NoThunks (PParamsHKD Identity era)
286-
, ToJSON (PParamsHKD Identity era)
287290
, FromJSON (PParamsHKD Identity era)
288291
, Eq (PParamsHKD StrictMaybe era)
289292
, Ord (PParamsHKD StrictMaybe era)
290293
, Show (PParamsHKD StrictMaybe era)
291294
, NFData (PParamsHKD StrictMaybe era)
292295
, NoThunks (PParamsHKD StrictMaybe era)
293-
, ToJSON (PParamsHKD StrictMaybe era)
294296
) =>
295297
EraPParams era
296298
where
@@ -557,6 +559,22 @@ ppuMinUTxOValueL = ppuLensHKD . hkdMinUTxOValueL @era @StrictMaybe
557559
ppuMinPoolCostL :: forall era. EraPParams era => Lens' (PParamsUpdate era) (StrictMaybe Coin)
558560
ppuMinPoolCostL = ppuLensHKD . hkdMinPoolCostL @era @StrictMaybe
559561

562+
jsonPairsPParams :: forall era e a. EraPParams era => Aeson.KeyValue e a => PParams era -> [a]
563+
jsonPairsPParams pp =
564+
[ Aeson.fromText ppName .= toJSON (pp ^. ppLens)
565+
| PParam' {ppName, ppLens} <- eraPParams @era
566+
]
567+
568+
jsonPairsPParamsUpdate ::
569+
forall era e a.
570+
(EraPParams era, Aeson.KeyValue e a) =>
571+
PParamsUpdate era -> [a]
572+
jsonPairsPParamsUpdate ppu =
573+
[ Aeson.fromText ppName .= toJSON v
574+
| PParam' {ppName, ppUpdate = Just (PParamUpdate {ppuLens})} <- eraPParams @era
575+
, SJust v <- [ppu ^. ppuLens]
576+
]
577+
560578
mapPParams :: (PParamsHKD Identity era1 -> PParamsHKD Identity era2) -> PParams era1 -> PParams era2
561579
mapPParams f (PParams pp) = PParams $ f pp
562580

0 commit comments

Comments
 (0)