1+ {-# LANGUAGE DeriveGeneric #-}
12{-# LANGUAGE DerivingStrategies #-}
23{-# LANGUAGE LambdaCase #-}
34{-# LANGUAGE NumericUnderscores #-}
@@ -34,13 +35,16 @@ import Cardano.BM.Data.Severity
3435 ( Severity (.. ) )
3536import Cardano.BM.Data.Tracer
3637 ( HasPrivacyAnnotation (.. ), HasSeverityAnnotation (.. ) )
38+ import Cardano.Wallet.Api.Types
39+ ( defaultRecordTypeOptions )
3740import Cardano.Wallet.Primitive.AddressDerivation
3841 ( hex )
3942import Cardano.Wallet.Primitive.Types
4043 ( PoolId
4144 , StakePoolMetadata (.. )
4245 , StakePoolMetadataHash (.. )
4346 , StakePoolMetadataUrl (.. )
47+ , decodePoolIdBech32
4448 )
4549import Control.Exception
4650 ( IOException , handle )
@@ -58,10 +62,9 @@ import Data.Aeson
5862 ( FromJSON (.. )
5963 , ToJSON (.. )
6064 , eitherDecodeStrict
61- , object
62- , withObject
63- , (.:)
64- , (.=)
65+ , fieldLabelModifier
66+ , genericParseJSON
67+ , genericToJSON
6568 )
6669import Data.Bifunctor
6770 ( first )
@@ -77,6 +80,8 @@ import Data.Text.Class
7780 ( TextDecodingError (.. ), ToText (.. ), fromText )
7881import Fmt
7982 ( pretty )
83+ import GHC.Generics
84+ ( Generic )
8085import Network.HTTP.Client
8186 ( HttpException (.. )
8287 , Manager
@@ -112,22 +117,22 @@ metadaFetchEp pid (StakePoolMetadataHash bytes)
112117 pidStr = T. unpack $ toText pid
113118
114119-- | TODO: import SMASH types
115- newtype SMASHPoolId = SMASHPoolId T. Text
116- deriving stock (Eq , Show , Ord )
117-
118- instance ToJSON SMASHPoolId where
119- toJSON (SMASHPoolId poolId) =
120- object
121- [ " poolId" .= poolId
122- ]
120+ newtype SMASHPoolId = SMASHPoolId
121+ { poolId :: T. Text
122+ } deriving stock (Eq , Show , Ord )
123+ deriving (Generic )
123124
124125instance FromJSON SMASHPoolId where
125- parseJSON = withObject " SMASHPoolId" $ \ o -> do
126- poolId <- o .: " poolId"
127- return $ SMASHPoolId poolId
126+ parseJSON = genericParseJSON defaultRecordTypeOptions
127+ { fieldLabelModifier = id }
128+
129+ instance ToJSON SMASHPoolId where
130+ toJSON = genericToJSON defaultRecordTypeOptions
131+ { fieldLabelModifier = id }
128132
129133toPoolId :: SMASHPoolId -> Either TextDecodingError PoolId
130- toPoolId (SMASHPoolId pid) = fromText pid
134+ toPoolId (SMASHPoolId pid) =
135+ either (\ _ -> decodePoolIdBech32 pid) Right (fromText @ PoolId pid)
131136
132137-- | Some default settings, overriding some of the library's default with
133138-- stricter values.
0 commit comments