lnd-client-0.1.0.1: src/LndClient/Data/Payment.hs
module LndClient.Data.Payment
( Payment (..),
PaymentStatus (..),
)
where
import LndClient.Import hiding (state)
import qualified Proto.Lnrpc.Ln1 as LnGRPC
import qualified Proto.Lnrpc.Ln1_Fields as LnGRPC
import Text.PrettyPrint.GenericPretty.Import
data Payment = Payment
{ paymentHash :: RHash,
paymentPreimage :: RPreimage,
valueMsat :: MSat,
state :: PaymentStatus
}
deriving stock (Eq, Show, Generic)
instance Out Payment
data PaymentStatus
= UNKNOWN
| IN_FLIGHT
| SUCCEEDED
| FAILED
deriving stock (Eq, Show, Generic)
instance Out PaymentStatus
instance FromGrpc Payment LnGRPC.Payment where
fromGrpc x = do
res <-
Payment
<$> fromGrpc (x ^. LnGRPC.paymentHash)
<*> fromGrpc (x ^. LnGRPC.paymentPreimage)
<*> fromGrpcMSat (x ^. LnGRPC.valueMsat)
<*> fromGrpc (x ^. LnGRPC.status)
if (state res == SUCCEEDED)
&& (newRHash (paymentPreimage res) /= paymentHash res)
then
Left . LndError $
"paymentPreimage doesn't match paymentHash, got: "
<> inspectPlain res
else Right res
instance FromGrpc PaymentStatus LnGRPC.Payment'PaymentStatus where
fromGrpc x =
case x of
LnGRPC.Payment'UNKNOWN -> Right UNKNOWN
LnGRPC.Payment'IN_FLIGHT -> Right IN_FLIGHT
LnGRPC.Payment'SUCCEEDED -> Right SUCCEEDED
LnGRPC.Payment'FAILED -> Right FAILED
LnGRPC.Payment'PaymentStatus'Unrecognized v ->
Left
. FromGrpcError
$ "Cannot parse PaymentStatus, value:" <> inspect v