module PayPal.Adaptive.Core.PayResponse
( module Export
, module PayPal.Adaptive.Core.PayResponse
) where
import Data.Maybe (isJust)
import Import
import PayPal.Adaptive.Core.PayResponse.PayKey as Export
import PayPal.Adaptive.Core.PayResponse.PaymentInfo as Export
import PayPal.Adaptive.Core.PayResponse.PayStatus as Export
data PayResponse = PayResponse
{ _prPayError :: Maybe Text
, _prPayStatus :: PayStatus
, _prPayKey :: PayKey
, _prPaymentInfos :: [PaymentInfo]
} deriving (Eq, Show)
instance FromJSON PayResponse where
parseJSON = withObject "PayResp" $ \o -> do
e <- o .:? "payErrorList"
k <- o .: "payKey"
s <- o .:? "paymentExecStatus"
s' <- o .:? "status"
status <- maybe (fail "no paymentExecStatus or status") return (if isJust s then s else s')
a <- o .:? "paymentInfoList"
case a of
Nothing -> return $ PayResponse e status k mempty
Just v -> do
infos <- v .:? "paymentInfo" .!= mempty
return $ PayResponse e status k infos
$(makeLenses ''PayResponse)