{-# LANGUAGE OverloadedStrings #-} module Prosper.Account ( Account (..) , emptyAccount ) where import Control.Applicative ((<$>), (<*>)) import Control.Monad (mzero) import Data.Aeson import Prosper.Money -- | A data structure for holding account information for Prosper data Account = Account { availableCash :: !Money -- ^ Available cash for investing , pendingInvestments :: !Money -- ^ Amount of money invested that is pending origination , totPrincipalRecvdOnActiveNotes :: !Money -- ^ Total principal payments received on active notes , totalInvestedOnActiveNotes :: !Money -- ^ Total amount invested , outstandingPrincipalActiveNotes :: !Money -- ^ Total principal outstanding on active notes , -- | Total dollars held in investible cash, -- pending orders in the market, outstanding principal totalAccountValue :: !Money , pendingInvestmentsSecondaryMkt :: !Money -- ^ Investments on Folio , pendingQuickInvestOrders :: !Money -- ^ Prosper Quick Invests } deriving (Show, Eq) -- | An empty account. All values are zero. emptyAccount :: Account emptyAccount = Account 0 0 0 0 0 0 0 0 -- | Parser for account info -- -- Located at api/Account instance FromJSON Account where parseJSON (Object v) = Account <$> v .: "AvailableCashBalance" <*> v .: "PendingInvestmentsPrimaryMkt" <*> v .: "TotalPrincipalReceivedOnActiveNotes" <*> v .: "TotalAmountInvestedOnActiveNotes" <*> v .: "OutstandingPrincipalOnActiveNotes" <*> v .: "TotalAccountValue" <*> v .: "PendingInvestmentsSecondaryMkt" <*> v .: "PendingQuickInvestOrders" parseJSON _ = mzero