Skip to content

Commit

Permalink
API: Add assets to wallet balance
Browse files Browse the repository at this point in the history
  • Loading branch information
rvl committed Jan 14, 2021
1 parent b157c46 commit a77065d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 19 deletions.
9 changes: 7 additions & 2 deletions lib/core/src/Cardano/Wallet/Api/Server.hs
Expand Up @@ -195,6 +195,8 @@ import Cardano.Wallet.Api.Types
, ApiUtxoStatistics (..)
, ApiVerificationKey (..)
, ApiWallet (..)
, ApiWalletAssetsBalance (..)
, ApiWalletBalance (..)
, ApiWalletDelegation (..)
, ApiWalletDelegationNext (..)
, ApiWalletDelegationStatus (..)
Expand All @@ -214,7 +216,6 @@ import Cardano.Wallet.Api.Types
, PostExternalTransactionData (..)
, PostTransactionData (..)
, PostTransactionFeeData (..)
, WalletBalance (..)
, WalletOrAccountPostData (..)
, WalletPostData (..)
, WalletPutData (..)
Expand Down Expand Up @@ -718,11 +719,15 @@ mkShelleyWallet ctx wid cp meta pending progress = do
cp
pure ApiWallet
{ addressPoolGap = ApiT $ getState cp ^. #externalPool . #gap
, balance = ApiT $ WalletBalance
, balance = ApiWalletBalance
{ available = Quantity $ availableBalance pending cp
, total = Quantity $ totalBalance pending reward cp
, reward
}
, assets = ApiWalletAssetsBalance
{ available = error "fixme"
, total = error "fixme"
}
, delegation = apiDelegation
, id = ApiT wid
, name = ApiT $ meta ^. #name
Expand Down
40 changes: 32 additions & 8 deletions lib/core/src/Cardano/Wallet/Api/Types.hs
Expand Up @@ -66,11 +66,12 @@ module Cardano.Wallet.Api.Types
, ApiStakePoolMetrics (..)
, ApiStakePoolFlag (..)
, ApiWallet (..)
, ApiWalletBalance (..)
, ApiWalletAssetsBalance (..)
, ApiWalletPassphrase (..)
, ApiWalletPassphraseInfo (..)
, ApiUtxoStatistics (..)
, toApiUtxoStatistics
, WalletBalance (..)
, WalletPostData (..)
, WalletPutData (..)
, SettingsPutData (..)
Expand Down Expand Up @@ -214,7 +215,6 @@ import Cardano.Wallet.Primitive.Types
, SmashServer (..)
, StakePoolMetadata
, StartTime (..)
, WalletBalance (..)
, WalletId (..)
, WalletName (..)
, decodePoolIdBech32
Expand Down Expand Up @@ -332,6 +332,7 @@ import qualified Cardano.Crypto.Wallet as CC
import qualified Cardano.Wallet.Primitive.AddressDerivation as AD
import qualified Cardano.Wallet.Primitive.Types as W
import qualified Cardano.Wallet.Primitive.Types.RewardAccount as W
import qualified Cardano.Wallet.Primitive.Types.TokenMap as W
import qualified Codec.Binary.Bech32 as Bech32
import qualified Codec.Binary.Bech32.TH as Bech32
import qualified Data.Aeson as Aeson
Expand All @@ -343,7 +344,6 @@ import qualified Data.Map as Map
import qualified Data.Text as T
import qualified Data.Text.Encoding as T


{-------------------------------------------------------------------------------
Styles of Wallets
-------------------------------------------------------------------------------}
Expand Down Expand Up @@ -530,7 +530,8 @@ data ApiCoinSelectionOutput (n :: NetworkDiscriminant) = ApiCoinSelectionOutput
data ApiWallet = ApiWallet
{ id :: !(ApiT WalletId)
, addressPoolGap :: !(ApiT AddressPoolGap)
, balance :: !(ApiT WalletBalance)
, balance :: !ApiWalletBalance
, assets :: !ApiWalletAssetsBalance
, delegation :: !ApiWalletDelegation
, name :: !(ApiT WalletName)
, passphrase :: !(Maybe ApiWalletPassphraseInfo)
Expand All @@ -539,6 +540,19 @@ data ApiWallet = ApiWallet
} deriving (Eq, Generic, Show)
deriving anyclass NFData

data ApiWalletBalance = ApiWalletBalance
{ available :: !(Quantity "lovelace" Natural)
, total :: !(Quantity "lovelace" Natural)
, reward :: !(Quantity "lovelace" Natural)
} deriving (Eq, Generic, Show)
deriving anyclass NFData

data ApiWalletAssetsBalance = ApiWalletAssetsBalance
{ available :: !(ApiT W.TokenMap)
, total :: !(ApiT W.TokenMap)
} deriving (Eq, Generic, Show)
deriving anyclass NFData

newtype ApiWalletPassphraseInfo = ApiWalletPassphraseInfo
{ lastUpdatedAt :: UTCTime
} deriving (Eq, Generic, Show)
Expand Down Expand Up @@ -1592,10 +1606,10 @@ instance FromJSON (ApiT AddressPoolGap) where
instance ToJSON (ApiT AddressPoolGap) where
toJSON = toJSON . getAddressPoolGap . getApiT

instance FromJSON (ApiT WalletBalance) where
parseJSON = fmap ApiT . genericParseJSON defaultRecordTypeOptions
instance ToJSON (ApiT WalletBalance) where
toJSON = genericToJSON defaultRecordTypeOptions . getApiT
instance FromJSON ApiWalletBalance where
parseJSON = genericParseJSON defaultRecordTypeOptions
instance ToJSON ApiWalletBalance where
toJSON = genericToJSON defaultRecordTypeOptions

data ApiByronWalletBalance = ApiByronWalletBalance
{ available :: !(Quantity "lovelace" Natural)
Expand All @@ -1608,6 +1622,16 @@ instance FromJSON ApiByronWalletBalance where
instance ToJSON ApiByronWalletBalance where
toJSON = genericToJSON defaultRecordTypeOptions

instance FromJSON ApiWalletAssetsBalance where
parseJSON = genericParseJSON defaultRecordTypeOptions
instance ToJSON ApiWalletAssetsBalance where
toJSON = genericToJSON defaultRecordTypeOptions

instance FromJSON (ApiT W.TokenMap) where
parseJSON = fmap (ApiT . W.getFlat) . parseJSON
instance ToJSON (ApiT W.TokenMap) where
toJSON = toJSON . W.Flat . getApiT

instance FromJSON (ApiT PoolId) where
parseJSON = parseJSON >=> eitherToParser
. bimap ShowFmt ApiT
Expand Down
9 changes: 0 additions & 9 deletions lib/core/src/Cardano/Wallet/Primitive/Types.hs
Expand Up @@ -85,7 +85,6 @@ module Cardano.Wallet.Primitive.Types
, WalletDelegationNext (..)
, WalletPassphraseInfo(..)
, PassphraseScheme(..)
, WalletBalance(..)
, IsDelegatingTo (..)

-- * Stake Pools
Expand Down Expand Up @@ -411,14 +410,6 @@ data PassphraseScheme

instance NFData PassphraseScheme

data WalletBalance = WalletBalance
{ available :: !(Quantity "lovelace" Natural)
, total :: !(Quantity "lovelace" Natural)
, reward :: !(Quantity "lovelace" Natural)
} deriving (Eq, Generic, Show)

instance NFData WalletBalance

{-------------------------------------------------------------------------------
Queries
-------------------------------------------------------------------------------}
Expand Down

0 comments on commit a77065d

Please sign in to comment.