From 339c93905fee949f8156c7cdfa309990f017aa66 Mon Sep 17 00:00:00 2001 From: Rene Vergara Date: Tue, 6 Aug 2024 16:08:51 -0500 Subject: [PATCH] Use TemplateHaskell for JSON instances --- src/Zenith/Types.hs | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/src/Zenith/Types.hs b/src/Zenith/Types.hs index b30e072..029be71 100644 --- a/src/Zenith/Types.hs +++ b/src/Zenith/Types.hs @@ -10,9 +10,11 @@ module Zenith.Types where import Data.Aeson +import Data.Aeson.TH (deriveJSON) import qualified Data.ByteString as BS import qualified Data.ByteString.Base64 as B64 import qualified Data.ByteString.Char8 as C +import Data.Char (toLower) import Data.HexString import Data.Maybe (fromMaybe) import qualified Data.Text as T @@ -110,25 +112,7 @@ data ZcashWalletAPI = ZcashWalletAPI , zw_lastSync :: !Int } deriving (Eq, Prelude.Show) -instance ToJSON ZcashWalletAPI where - toJSON (ZcashWalletAPI i n net b l) = - object - [ "index" .= i - , "name" .= n - , "network" .= net - , "birthday" .= b - , "lastSync" .= l - ] - -instance FromJSON ZcashWalletAPI where - parseJSON = - withObject "ZcashWalletAPI" $ \obj -> do - i <- obj .: "index" - n <- obj .: "name" - net <- obj .: "network" - b <- obj .: "birthday" - l <- obj .: "lastSync" - pure $ ZcashWalletAPI i n net b l +$(deriveJSON defaultOptions {fieldLabelModifier = drop 3} ''ZcashWalletAPI) data ZcashAccountAPI = ZcashAccountAPI { za_index :: !Int @@ -136,17 +120,18 @@ data ZcashAccountAPI = ZcashAccountAPI , za_name :: !T.Text } deriving (Eq, Prelude.Show) -instance ToJSON ZcashAccountAPI where - toJSON (ZcashAccountAPI i w n) = - object ["index" .= i, "wallet" .= w, "name" .= n] +$(deriveJSON defaultOptions {fieldLabelModifier = drop 3} ''ZcashAccountAPI) -instance FromJSON ZcashAccountAPI where - parseJSON = - withObject "ZcashAccountAPI" $ \obj -> do - i <- obj .: "index" - w <- obj .: "wallet" - n <- obj .: "name" - pure $ ZcashAccountAPI i w n +data ZcashAddressAPI = ZcashAddressAPI + { zd_index :: !Int + , zd_account :: !Int + , zd_name :: !T.Text + , zd_ua :: !T.Text + , zd_legacy :: !(Maybe T.Text) + , zd_transparent :: !(Maybe T.Text) + } deriving (Eq, Prelude.Show) + +$(deriveJSON defaultOptions {fieldLabelModifier = drop 3} ''ZcashAddressAPI) -- ** `zebrad` -- | Type for modeling the tree state response